Ejemplo n.º 1
0
    def plotHisto(self, histo, canvasName):
        plot = plots.PlotBase()
        plot.histoMgr.appendHisto(histograms.Histo(histo, histo.GetName()))
        plot.createFrame(canvasName + self.label,
                         opts={
                             "ymin": 0.1,
                             "ymaxfactor": 2.
                         })

        histograms.addCmsPreliminaryText()
        histograms.addEnergyText()
        histograms.addLuminosityText(x=None, y=None, lumi=self.lumi)

        plot.getPad().SetLogy(True)

        integralValue = int(0.5 +
                            histo.Integral(0, histo.GetNbinsX(), "width"))
        print histo.GetName(), "Integral", histo.Integral(
            0, histo.GetNbinsX(), "width")
        histograms.addText(0.4, 0.7, "Integral = %s ev" % integralValue)

        match = re.search("aseline", histo.GetName())
        if match:
            self.nBaseQCD = integralValue
        match = re.search("nverted", histo.GetName())
        if match:
            self.nInvQCD = integralValue

        self.plotIntegral(plot, histo.GetName())
Ejemplo n.º 2
0
def rtauGen(h, name, rebin=2, ratio=False, defaultStyles=True):
    if defaultStyles:
        h.setDefaultStyles()
        h.histoMgr.forEachHisto(styles.generator())

    h.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin))


    xlabel = "PF E_{T}^{miss} (GeV)"
    ylabel = "Events / %.2f" % h.binWidth()
    if "LeptonsInMt" in name:
        xlabel = "m_{T}(#tau jet, E_{T}^{miss}) (GeV/c^{2})"
        ylabel = "Events / %.0f GeV/c^{2}" % h.binWidth()
    if "NoLeptonsRealTau" in name:
        xlabel = "m_{T}(#tau jet, E_{T}^{miss}) (GeV/c^{2})"
        ylabel = "Events / %.0f GeV/c^{2}" % h.binWidth()
    if "Mass" in name:
        xlabel = "m_{T}(#tau jet, E_{T}^{miss}) (GeV/c^{2})"
        ylabel = "Events / %.0f GeV/c^{2}" % h.binWidth()

        
    kwargs = {"ymin": 0.1, "ymax": 1000}
    if "LeptonsInMt" in name: 
        kwargs = {"ymin": 0., "xmax": 300}
    if "NoLeptonsRealTau" in name: 
        kwargs = {"ymin": 0., "xmax": 300}
    if "Rtau" in name:
        kwargs = {"ymin": 0.0001, "xmax": 1.1}   
        kwargs = {"ymin": 0.1, "xmax": 1.1}     
        h.getPad().SetLogy(True)

#    kwargs["opts"] = {"ymin": 0, "xmax": 14, "ymaxfactor": 1.1}}
    if ratio:
        kwargs["opts2"] = {"ymin": 0.5, "ymax": 1.5}
        kwargs["createRatio"] = True
#    name = name+"_log"

    h.createFrame(name, **kwargs)

#    histograms.addText(0.65, 0.7, "BR(t #rightarrow bH^{#pm})=0.05", 20)
    h.getPad().SetLogy(True)
    
    leg = histograms.createLegend(0.6, 0.75, 0.8, 0.9)
 
    if "LeptonsInMt" in name:
        h.getPad().SetLogy(False)
        leg = histograms.moveLegend(leg, dx=-0.18)
        histograms.addText(0.5, 0.65, "TailKiller cut: Tight", 20)
  
    h.setLegend(leg)
    plots._legendLabels["MetNoJetInHole"] = "Jets outside dead cells"
    plots._legendLabels["MetJetInHole"] = "Jets within dead cells"
    histograms.addText(300, 300, "p_{T}^{jet} > 50 GeV/c", 20)
    kwargs["opts2"] = {"ymin": 0.5, "ymax": 1.5}
    kwargs["createRatio"] = True
#    if ratio:
#        h.createFrameFraction(name, opts=opts, opts2=opts2)
#    h.setLegend(leg)

    common(h, xlabel, ylabel)
Ejemplo n.º 3
0
def vertexCount(h, prefix="", postfix="", ratio=True):
    xlabel = "Number of good vertices"
    ylabel = "Number of events"

    if h.normalizeToOne:
        ylabel = "Arbitrary units."

    h.stackMCHistograms()

    stack = h.histoMgr.getHisto("StackedMC")
    #hsum = stack.getSumRootHisto()
    #total = hsum.Integral(0, hsum.GetNbinsX()+1)
    #for rh in stack.getAllRootHistos():
    #    dataset._normalizeToFactor(rh, 1/total)
    #dataset._normalizeToOne(h.histoMgr.getHisto("Data").getRootHisto())

    h.addMCUncertainty()

    opts = {}
    opts_log = {"ymin": 1e-10, "ymaxfactor": 10, "xmax": 30}
    opts_log.update(opts)

    opts2 = {"ymin": 0.5, "ymax": 3}
    opts2_log = opts2
    #opts2_log = {"ymin": 5e-2, "ymax": 5e2}

    h.createFrame(prefix + "vertices" + postfix,
                  opts=opts,
                  createRatio=ratio,
                  opts2=opts2)
    h.frame.GetXaxis().SetTitle(xlabel)
    h.frame.GetYaxis().SetTitle(ylabel)
    h.setLegend(histograms.createLegend())
    h.draw()
    histograms.addCmsPreliminaryText()
    histograms.addEnergyText()
    #    histograms.addLuminosityText(x=None, y=None, lumi=191.)
    h.histoMgr.addLuminosityText()
    if h.normalizeToOne:
        histograms.addText(0.35, 0.9, "Normalized to unit area", 17)
    h.save()

    h.createFrame(prefix + "vertices" + postfix + "_log",
                  opts=opts_log,
                  createRatio=ratio,
                  opts2=opts2_log)
    h.frame.GetXaxis().SetTitle(xlabel)
    h.frame.GetYaxis().SetTitle(ylabel)
    h.getPad1().SetLogy(True)
    #h.getPad2().SetLogy(True)
    h.setLegend(histograms.createLegend())
    h.draw()
    histograms.addCmsPreliminaryText()
    histograms.addEnergyText()
    #    histograms.addLuminosityText(x=None, y=None, lumi=191.)
    h.histoMgr.addLuminosityText()
    if h.normalizeToOne:
        histograms.addText(0.35, 0.9, "Normalized to unit area", 17)
    h.save()
Ejemplo n.º 4
0
def vertexCount(h, prefix="", postfix="", ratio=True):
        xlabel = "Number of good vertices"
        ylabel = "Number of events"

        if h.normalizeToOne:
            ylabel = "Arbitrary units."

        h.stackMCHistograms()

        stack = h.histoMgr.getHisto("StackedMC")
        #hsum = stack.getSumRootHisto()
        #total = hsum.Integral(0, hsum.GetNbinsX()+1)
        #for rh in stack.getAllRootHistos():
        #    dataset._normalizeToFactor(rh, 1/total)
        #dataset._normalizeToOne(h.histoMgr.getHisto("Data").getRootHisto())

        h.addMCUncertainty()

        opts = {}
        opts_log = {"ymin": 1e-10, "ymaxfactor": 10, "xmax": 30}
        opts_log.update(opts)

        opts2 = {"ymin": 0.5, "ymax": 3}
        opts2_log = opts2
        #opts2_log = {"ymin": 5e-2, "ymax": 5e2}
        
        h.createFrame(prefix+"vertices"+postfix, opts=opts, createRatio=ratio, opts2=opts2)
        h.frame.GetXaxis().SetTitle(xlabel)
        h.frame.GetYaxis().SetTitle(ylabel)
        h.setLegend(histograms.createLegend())
        h.draw()
        histograms.addCmsPreliminaryText()
        histograms.addEnergyText()
        #    histograms.addLuminosityText(x=None, y=None, lumi=191.)
        h.histoMgr.addLuminosityText()
        if h.normalizeToOne:
            histograms.addText(0.35, 0.9, "Normalized to unit area", 17)
        h.save()

        h.createFrame(prefix+"vertices"+postfix+"_log", opts=opts_log, createRatio=ratio, opts2=opts2_log)
        h.frame.GetXaxis().SetTitle(xlabel)
        h.frame.GetYaxis().SetTitle(ylabel)
        h.getPad1().SetLogy(True)
        #h.getPad2().SetLogy(True)
        h.setLegend(histograms.createLegend())
        h.draw()
        histograms.addCmsPreliminaryText()
        histograms.addEnergyText()
        #    histograms.addLuminosityText(x=None, y=None, lumi=191.)
        h.histoMgr.addLuminosityText()
        if h.normalizeToOne:
            histograms.addText(0.35, 0.9, "Normalized to unit area", 17)
        h.save()
Ejemplo n.º 5
0
def plot(datasets):

    #    datasetName = "TTJets_TuneZ2_Summer11"
    #    datasetName = "TTToHplusBWB_M120_Summer11"
    datasetName = "WJets_TuneZ2_Summer11"

    den_selection = "jets_p4.Pt()>30 && ( abs(jets_flavour) < 4 || jets_flavour > 20)"
    #    den_selection = "jets_p4.Pt()>30"
    num_selection = den_selection + "&&jets_btag>1.7"

    ds = datasets.getDataset(datasetName)
    den = ds.getDatasetRootHisto(
        treeDraw.clone(varexp="jets_p4.Pt()>>dist1(100,0.,500.)",
                       selection=den_selection)).getHistogram()
    num = ds.getDatasetRootHisto(
        treeDraw.clone(varexp="jets_p4.Pt()>>dist2(100,0.,500.)",
                       selection=num_selection)).getHistogram()

    canvas = ROOT.TCanvas("canvas", "", 500, 700)
    canvas.Divide(1, 3)

    canvas.cd(1)
    den.Draw()

    canvas.cd(2)
    num.Draw()

    canvas.cd(3)

    #    eff = ROOT.TEfficiency(num,den)
    eff = num.Clone()
    eff.Divide(den)
    eff.Draw()

    canvas.Print("canvas.C")

    plot = plots.PlotBase()
    plot.histoMgr.appendHisto(histograms.Histo(eff, eff.GetName()))
    plot.createFrame("BtaggingEff", opts={"ymin": 0.1, "ymaxfactor": 2.})

    plot.frame.GetXaxis().SetTitle("jet E_{T} (GeV)")
    plot.frame.GetYaxis().SetTitle("B-tagging eff.")

    histograms.addText(0.2, 0.8, "MC: " + datasetName, 25)
    plot.addStandardTexts()

    plot.draw()
    plot.save()
Ejemplo n.º 6
0
def plot(datasets):

#    datasetName = "TTJets_TuneZ2_Summer11"
#    datasetName = "TTToHplusBWB_M120_Summer11"
    datasetName = "WJets_TuneZ2_Summer11"


    den_selection = "jets_p4.Pt()>30 && ( abs(jets_flavour) < 4 || jets_flavour > 20)"
#    den_selection = "jets_p4.Pt()>30"
    num_selection = den_selection + "&&jets_btag>1.7"

    ds = datasets.getDataset(datasetName)
    den = ds.getDatasetRootHisto(treeDraw.clone(varexp="jets_p4.Pt()>>dist1(100,0.,500.)", selection=den_selection)).getHistogram()
    num = ds.getDatasetRootHisto(treeDraw.clone(varexp="jets_p4.Pt()>>dist2(100,0.,500.)", selection=num_selection)).getHistogram()

    canvas = ROOT.TCanvas("canvas","",500,700)
    canvas.Divide(1,3)

    canvas.cd(1)
    den.Draw()

    canvas.cd(2)
    num.Draw()

    canvas.cd(3)

#    eff = ROOT.TEfficiency(num,den)
    eff = num.Clone()
    eff.Divide(den)
    eff.Draw()

    canvas.Print("canvas.C")


    plot = plots.PlotBase()
    plot.histoMgr.appendHisto(histograms.Histo(eff,eff.GetName()))
    plot.createFrame("BtaggingEff", opts={"ymin": 0.1, "ymaxfactor": 2.})

    plot.frame.GetXaxis().SetTitle("jet E_{T} (GeV)")
    plot.frame.GetYaxis().SetTitle("B-tagging eff.")

    histograms.addText(0.2, 0.8, "MC: "+datasetName, 25)
    plot.addStandardTexts()

    plot.draw()
    plot.save()
Ejemplo n.º 7
0
    def plotHisto(self,histo,canvasName):
        plot = plots.PlotBase()
        plot.histoMgr.appendHisto(histograms.Histo(histo,histo.GetName()))
        plot.createFrame(canvasName+self.label, opts={"ymin": 0.1, "ymaxfactor": 2.})

        histograms.addCmsPreliminaryText()
        histograms.addEnergyText()
        histograms.addLuminosityText(x=None, y=None, lumi=self.lumi)

        plot.getPad().SetLogy(True)

        integralValue = int(0.5 + histo.Integral(0,histo.GetNbinsX(),"width"))
        print histo.GetName(),"Integral",histo.Integral(0,histo.GetNbinsX(),"width")
        histograms.addText(0.4,0.7,"Integral = %s ev"% integralValue)

        match = re.search("aseline",histo.GetName())
        if match:
            self.nBaseQCD = integralValue
        match = re.search("nverted",histo.GetName())
        if match:
            self.nInvQCD = integralValue
            
        self.plotIntegral(plot, histo.GetName())
def transverseMass(h, name, rebin=1, opts={}, opts_log={}, ratio=False):
    if rebin > 1:
        h.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin))
    xlabel = "m_{T}(#tau jet, E_{T}^{miss}) (GeV/c^{2})"
    ylabel = "Events / %.0f GeV/c^{2}" % h.binWidth()

    tauEmbedding.scaleNormalization(h)
    h.stackMCHistograms()
    h.addMCUncertainty()

    _opts = {"ymaxfactor": 1.5}
    _opts.update(opts)

    _opts_log = {"ymin": 1e-2, "ymaxfactor": 2}
    _opts_log.update(_opts)
    _opts_log.update(opts_log)

    _opts2 = {"ymin": 0, "ymax": 2}

    h.createFrame(name, opts=_opts, opts2=_opts2, createRatio=ratio)
    h.setLegend(histograms.createLegend())
    deltaPhi = "#Delta#phi(#tau jet, E_{T}^{miss})"
    coord = {"x": 0.5, "y": 0.55, "size": 20}
    if "AfterBTagging" in name:
        histograms.addText(text="Without %s cut" % deltaPhi, **coord)
    elif "AfterDeltaPhi160" in name:
        histograms.addText(text="%s < 160^{#circ}" % deltaPhi, **coord)
    elif "AfterDeltaPhi130" in name:
        histograms.addText(text="%s < 130^{#circ}" % deltaPhi, **coord)
    common(h, xlabel, ylabel)

    name += "_log"
    h.createFrame(name, opts=_opts_log, opts2=_opts2, createRatio=ratio)
    h.setLegend(histograms.createLegend())
    ROOT.gPad.SetLogy(True)
    common(h, xlabel, ylabel)
def transverseMass(h, name, rebin=1, opts={}, opts_log={}, ratio=False):
    if rebin > 1:
        h.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin))
    xlabel = "m_{T}(#tau jet, E_{T}^{miss}) (GeV/c^{2})"
    ylabel = "Events / %.0f GeV/c^{2}" % h.binWidth()
    
    tauEmbedding.scaleNormalization(h)
    h.stackMCHistograms()
    h.addMCUncertainty()

    _opts = {"ymaxfactor": 1.5}
    _opts.update(opts)

    _opts_log = {"ymin": 1e-2, "ymaxfactor": 2}
    _opts_log.update(_opts)
    _opts_log.update(opts_log)

    _opts2 = {"ymin": 0, "ymax": 2}

    h.createFrame(name, opts=_opts, opts2=_opts2, createRatio=ratio)
    h.setLegend(histograms.createLegend())
    deltaPhi = "#Delta#phi(#tau jet, E_{T}^{miss})"
    coord = {"x": 0.5, "y": 0.55, "size": 20}
    if "AfterBTagging" in name:
        histograms.addText(text="Without %s cut"%deltaPhi, **coord)
    elif "AfterDeltaPhi160" in name:
        histograms.addText(text="%s < 160^{#circ}"%deltaPhi, **coord)
    elif "AfterDeltaPhi130" in name:
        histograms.addText(text="%s < 130^{#circ}"%deltaPhi, **coord)
    common(h, xlabel, ylabel)

    name += "_log"
    h.createFrame(name, opts=_opts_log, opts2=_opts2, createRatio=ratio)
    h.setLegend(histograms.createLegend())
    ROOT.gPad.SetLogy(True)
    common(h, xlabel, ylabel)
Ejemplo n.º 10
0
    def Save(self, name):

        hObserved = self.CreateGraph("Observed")
        hExpected = self.CreateGraph("Expected")
        hExpected1s = self.CreateGraph("Expected1")
        hExpected1s.SetFillColor(ROOT.kYellow)
        hExpected2s = self.CreateGraph("Expected2")
        hExpected2s.SetFillColor(ROOT.kOrange)

        style = tdrstyle.TDRStyle()

        plot = plots.ComparisonManyPlot(
            histograms.HistoGraph(hObserved, "Observed"), [
                histograms.HistoGraph(hExpected, "Expected"),
                histograms.HistoGraph(hExpected1s, "Expected1"),
                histograms.HistoGraph(hExpected2s, "Expected2")
            ])

        obsStyle = styles.getDataStyle().clone()
        plot.histoMgr.forHisto("Observed", styles.getDataStyle().clone())
        plot.histoMgr.setHistoDrawStyle("Observed", "PL")

        expStyle = styles.getDataStyle().clone()
        expStyle.append(styles.StyleLine(lineStyle=2))
        expStyle.append(styles.StyleLine(lineColor=ROOT.kRed))
        expStyle.append(styles.StyleMarker(markerStyle=ROOT.kFullSquare))
        expStyle.append(styles.StyleMarker(markerColor=ROOT.kRed))
        plot.histoMgr.forHisto("Expected", expStyle)
        plot.histoMgr.setHistoDrawStyle("Expected", "PL")
        plot.histoMgr.setHistoDrawStyle("Expected1", "PL3")
        plot.histoMgr.setHistoDrawStyle("Expected2", "PL3")

        plot.createFrame(name,
                         opts={
                             "xmin": 70.1,
                             "xmax": 169.9,
                             "ymin": 0,
                             "ymax": 0.2
                         })
        plot.frame.GetXaxis().SetTitle(self.xtitle)
        plot.frame.GetYaxis().SetTitle(self.ytitle)

        plot.histoMgr.setHistoLegendStyle("Observed", "PL")
        plot.histoMgr.setHistoLegendStyle("Expected", "PL")
        plot.histoMgr.setHistoLegendStyle("Expected1", "F")
        plot.histoMgr.setHistoLegendStyle("Expected2", "F")

        plot.histoMgr.setHistoLegendLabelMany({
            "Expected":
            "Expected median",
            "Expected1":
            "Expected median #pm1#sigma",
            "Expected2":
            "Expected median #pm2#sigma"
        })
        plot.setLegend(histograms.createLegend(0.55, 0.68, 0.9, 0.93))

        histograms.addCmsPreliminaryText()
        histograms.addEnergyText()
        histograms.addLuminosityText(x=None, y=None, lumi=self.lumi)

        textSize = 16
        textX = 0.19
        textY = 0.8
        textDY = 0.038
        histograms.addText(textX, textY + 2 * textDY,
                           "t#rightarrowbH^{#pm}, H^{#pm}#rightarrow#tau#nu",
                           textSize)
        histograms.addText(textX, textY + textDY, "Fully hadronic final state",
                           textSize)
        histograms.addText(textX, textY,
                           "BR(H^{#pm}#rightarrow#tau^{#pm} #nu) = 1",
                           textSize)

        plot.draw()
        plot.save()
Ejemplo n.º 11
0
    def fitData(self, histo):

        parInvQCD = self.parInvQCD
        parMCEWK = self.parMCEWK
        nInvQCD = self.nInvQCD
        nFitInvQCD = self.nFitInvQCD
        nMCEWK = self.nMCEWK

        class FitFunction:
            def __call__(self, x, par):
                return par[0] * (
                    par[1] * QCDFunction(x, parInvQCD, 1 / nFitInvQCD) +
                    (1 - par[1]) * EWKFunction(x, parMCEWK, 1 / nMCEWK))

        class QCDOnly:
            def __call__(self, x, par):
                return par[0] * par[1] * QCDFunction(x, parInvQCD,
                                                     1 / nFitInvQCD)

        rangeMin = histo.GetXaxis().GetXmin()
        rangeMax = histo.GetXaxis().GetXmax()
        numberOfParameters = 2

        print "Fit range ", rangeMin, " - ", rangeMax

        theFit = TF1("theFit", FitFunction(), rangeMin, rangeMax,
                     numberOfParameters)

        plot = plots.PlotBase()
        plot.histoMgr.appendHisto(histograms.Histo(histo, histo.GetName()))
        plot.createFrame("combinedfit" + self.label,
                         opts={
                             "ymin": 1e-5,
                             "ymaxfactor": 2.
                         })

        histograms.addCmsPreliminaryText()
        histograms.addEnergyText()
        histograms.addLuminosityText(x=None, y=None, lumi=self.lumi)

        print "data events ", histo.Integral(0, histo.GetNbinsX())

        histo.Fit(theFit, "R")

        theFit.SetRange(histo.GetXaxis().GetXmin(), histo.GetXaxis().GetXmax())
        theFit.SetLineStyle(2)
        theFit.Draw("same")

        par = theFit.GetParameters()

        qcdOnly = TF1("qcdOnly", QCDOnly(), rangeMin, rangeMax,
                      numberOfParameters)
        qcdOnly.FixParameter(0, par[0])
        qcdOnly.FixParameter(1, par[1])
        qcdOnly.SetLineStyle(2)
        qcdOnly.Draw("same")

        histograms.addText(0.35, 0.8, "Data, Baseline TauID")
        histograms.addText(0.4, 0.3, "QCD", 15)

        plot.histoMgr.appendHisto(histograms.Histo(qcdOnly, "qcdOnly"))

        plot.getPad().SetLogy(True)

        plot.draw()
        plot.save()

        fitPars = "fit parameters "
        i = 0
        while i < numberOfParameters:
            fitPars = fitPars + " " + str(par[i])
            i = i + 1
        print fitPars
        nBaseQCD = par[0]
        self.QCDfraction = par[1]
        if len(self.label) > 0:
            print "Bin ", self.label
        print "Integral     ", nBaseQCD
        print "QCD fraction ", self.QCDfraction

        return theFit
Ejemplo n.º 12
0
    def fitEWK(self, histo, options="R"):

        rangeMin = histo.GetXaxis().GetXmin()
        rangeMax = histo.GetXaxis().GetXmax()
        #	rangeMin = 120
        #	rangeMax = 120

        numberOfParameters = 4

        print "Fit range ", rangeMin, " - ", rangeMax

        class FitFunction:
            def __call__(self, x, par):
                return EWKFunction(x, par, 1, 1)
#		return SumFunction(x,par)
#	        return TestFunction(x,par,1)

        class PlotFunction:
            def __call__(self, x, par):
                return EWKFunction(x, par, 0)

        theFit = TF1('theFit', FitFunction(), rangeMin, rangeMax,
                     numberOfParameters)
        thePlot = TF1('thePlot', PlotFunction(), rangeMin, rangeMax,
                      numberOfParameters)

        theFit.SetParLimits(0, 5, 30)
        theFit.SetParLimits(1, 90, 120)
        theFit.SetParLimits(2, 30, 50)
        theFit.SetParLimits(3, 0.001, 1)

        if self.label == "4050":
            theFit.SetParLimits(0, 5, 20)
            theFit.SetParLimits(1, 90, 120)
            theFit.SetParLimits(2, 30, 50)
            theFit.SetParLimits(3, 0.001, 1)

        if self.label == "5060":
            theFit.SetParLimits(0, 5, 20)
            theFit.SetParLimits(1, 90, 120)
            theFit.SetParLimits(2, 20, 50)
            theFit.SetParLimits(3, 0.001, 1)

        if self.label == "6070":
            theFit.SetParLimits(0, 5, 50)
            theFit.SetParLimits(1, 90, 150)
            theFit.SetParLimits(2, 20, 50)
            theFit.SetParLimits(3, 0.001, 1)

        if self.label == "7080":
            theFit.SetParLimits(0, 5, 60)
            theFit.SetParLimits(1, 90, 200)
            theFit.SetParLimits(2, 20, 100)
            theFit.SetParLimits(3, 0.001, 1)

        if self.label == "80100":
            theFit.SetParLimits(0, 5, 50)
            theFit.SetParLimits(1, 50, 170)
            theFit.SetParLimits(2, 20, 60)
            theFit.SetParLimits(3, 0.001, 1)

        if self.label == "100120":
            theFit.SetParLimits(0, 5, 50)
            theFit.SetParLimits(1, 90, 170)
            theFit.SetParLimits(2, 20, 60)
            theFit.SetParLimits(3, 0.001, 1)

        if self.label == "120150":
            theFit.SetParLimits(0, 5, 50)
            theFit.SetParLimits(1, 60, 170)
            theFit.SetParLimits(2, 10, 100)
            theFit.SetParLimits(3, 0.001, 1)

        if self.label == "150":
            theFit.SetParLimits(0, 5, 50)
            theFit.SetParLimits(1, 70, 170)
            theFit.SetParLimits(2, 20, 100)
            theFit.SetParLimits(3, 0.001, 1)

        plot = plots.PlotBase()
        plot.histoMgr.appendHisto(histograms.Histo(histo, histo.GetName()))
        plot.createFrame("ewkfit" + self.label,
                         opts={
                             "ymin": 1e-5,
                             "ymaxfactor": 2.
                         })

        histograms.addCmsPreliminaryText()
        histograms.addEnergyText()
        histograms.addLuminosityText(x=None, y=None, lumi=self.lumi)

        self.normEWK = histo.Integral(0, histo.GetNbinsX())

        histo.Scale(1 / self.normEWK)

        histo.Fit(theFit, options)

        theFit.SetRange(histo.GetXaxis().GetXmin(), histo.GetXaxis().GetXmax())
        theFit.SetLineStyle(2)
        theFit.Draw("same")

        self.parMCEWK = theFit.GetParameters()

        fitPars = "fit parameters "

        i = 0
        while i < numberOfParameters:
            fitPars = fitPars + " " + str(self.parMCEWK[i])
            thePlot.SetParameter(i, theFit.GetParameter(i))
            i = i + 1
        thePlot.Draw("same")

        histograms.addText(0.2, 0.2, "EWK MC, baseline TauID")

        plot.histoMgr.appendHisto(histograms.Histo(theFit, "Fit"))

        plot.getPad().SetLogy(True)

        plot.draw()
        plot.save()

        self.parMCEWK = theFit.GetParameters()

        print fitPars
        self.nMCEWK = theFit.Integral(0, 1000, self.parMCEWK)
        print "Integral ", self.normEWK * self.nMCEWK
Ejemplo n.º 13
0
    def fitQCD(self, origHisto):

        histo = origHisto.Clone("histo")

        rangeMin = histo.GetXaxis().GetXmin()
        rangeMax = histo.GetXaxis().GetXmax()

        numberOfParameters = 8

        print "Fit range ", rangeMin, " - ", rangeMax

        class FitFunction:
            def __call__(self, x, par):
                return QCDFunction(x, par, 1)

        theFit = TF1('theFit', FitFunction(), rangeMin, rangeMax,
                     numberOfParameters)

        theFit.SetParLimits(0, 1, 20)
        theFit.SetParLimits(1, 20, 40)
        theFit.SetParLimits(2, 10, 25)

        theFit.SetParLimits(3, 1, 10)
        theFit.SetParLimits(4, 0, 150)
        theFit.SetParLimits(5, 10, 100)

        theFit.SetParLimits(6, 0.0001, 1)
        theFit.SetParLimits(7, 0.001, 0.05)

        if self.label == "Baseline":
            rangeMax = 240

        if self.label == "7080":
            theFit.SetParLimits(5, 10, 100)

#	if self.label == "100120":
#	    theFit.SetParLimits(0,1,20)
#	    theFit.SetParLimits(2,1,25)
#	    theFit.SetParLimits(3,0.1,20)

        if self.label == "120150":
            theFit.SetParLimits(0, 1, 20)
            theFit.SetParLimits(3, 0.1, 5)

        gStyle.SetOptFit(0)

        plot = plots.PlotBase()
        plot.histoMgr.appendHisto(histograms.Histo(histo, histo.GetName()))
        plot.createFrame("qcdfit" + self.label,
                         opts={
                             "ymin": 1e-5,
                             "ymaxfactor": 2.
                         })

        histograms.addCmsPreliminaryText()
        histograms.addEnergyText()
        histograms.addLuminosityText(x=None, y=None, lumi=self.lumi)

        self.normInvQCD = histo.Integral(0, histo.GetNbinsX())

        histo.Scale(1 / self.normInvQCD)
        histo.Fit(theFit, "LR")

        theFit.SetRange(histo.GetXaxis().GetXmin(), histo.GetXaxis().GetXmax())
        theFit.SetLineStyle(2)
        theFit.Draw("same")

        histograms.addText(0.4, 0.8, "Inverted TauID")

        plot.histoMgr.appendHisto(histograms.Histo(theFit, "Fit"))

        plot.getPad().SetLogy(True)

        plot.draw()
        plot.save()

        self.parInvQCD = theFit.GetParameters()

        fitPars = "fit parameters "
        i = 0
        while i < numberOfParameters:
            fitPars = fitPars + " " + str(self.parInvQCD[i])
            i = i + 1
        print fitPars
        self.nFitInvQCD = theFit.Integral(0, 1000, self.parInvQCD)
        print "Integral ", self.normInvQCD * self.nFitInvQCD
Ejemplo n.º 14
0
    def fitQCD(self,origHisto): 

	histo = origHisto.Clone("histo")

        rangeMin = histo.GetXaxis().GetXmin()
        rangeMax = histo.GetXaxis().GetXmax()

        numberOfParameters = 8

        print "Fit range ",rangeMin, " - ",rangeMax

	class FitFunction:
	    def __call__( self, x, par ):
		return QCDFunction(x,par,1)

        theFit = TF1('theFit',FitFunction(),rangeMin,rangeMax,numberOfParameters)

        theFit.SetParLimits(0,1,20)
        theFit.SetParLimits(1,20,40)
        theFit.SetParLimits(2,10,25)

        theFit.SetParLimits(3,1,10)
        theFit.SetParLimits(4,0,150)
        theFit.SetParLimits(5,10,100)

        theFit.SetParLimits(6,0.0001,1)
        theFit.SetParLimits(7,0.001,0.05)

	if self.label == "Baseline":
	    rangeMax = 240

	if self.label == "7080":
	    theFit.SetParLimits(5,10,100)

#	if self.label == "100120":
#	    theFit.SetParLimits(0,1,20)
#	    theFit.SetParLimits(2,1,25)
#	    theFit.SetParLimits(3,0.1,20)

	if self.label == "120150":
            theFit.SetParLimits(0,1,20)
            theFit.SetParLimits(3,0.1,5)


	gStyle.SetOptFit(0)

	plot = plots.PlotBase()
	plot.histoMgr.appendHisto(histograms.Histo(histo,histo.GetName()))
	plot.createFrame("qcdfit"+self.label, opts={"ymin": 1e-5, "ymaxfactor": 2.})

        histograms.addCmsPreliminaryText()
        histograms.addEnergyText()
        histograms.addLuminosityText(x=None, y=None, lumi=self.lumi)

	self.normInvQCD = histo.Integral(0,histo.GetNbinsX())

	histo.Scale(1/self.normInvQCD)
        histo.Fit(theFit,"LR")         
                                      
        theFit.SetRange(histo.GetXaxis().GetXmin(),histo.GetXaxis().GetXmax())
        theFit.SetLineStyle(2)                                                
        theFit.Draw("same")


        histograms.addText(0.4,0.8,"Inverted TauID")

	plot.histoMgr.appendHisto(histograms.Histo(theFit,"Fit"))

        plot.getPad().SetLogy(True) 
        
        plot.draw()
        plot.save()

        self.parInvQCD = theFit.GetParameters()                               
                                                                              
        fitPars = "fit parameters "                                           
        i = 0                                                                 
        while i < numberOfParameters:
            fitPars = fitPars + " " + str(self.parInvQCD[i])
            i = i + 1
        print fitPars
	self.nFitInvQCD = theFit.Integral(0,1000,self.parInvQCD)
        print "Integral ",self.normInvQCD*self.nFitInvQCD
Ejemplo n.º 15
0
    def fitData(self,histo):

	parInvQCD  = self.parInvQCD
	parMCEWK   = self.parMCEWK
	nInvQCD    = self.nInvQCD
        nFitInvQCD = self.nFitInvQCD
        nMCEWK     = self.nMCEWK

        class FitFunction:
            def __call__( self, x, par ):
                return par[0]*(par[1] * QCDFunction(x,parInvQCD,1/nFitInvQCD) + ( 1 - par[1] ) * EWKFunction(x,parMCEWK,1/nMCEWK))

	class QCDOnly:
	    def __call__( self, x, par ):
		return par[0]*par[1] * QCDFunction(x,parInvQCD,1/nFitInvQCD)

        rangeMin = histo.GetXaxis().GetXmin()
        rangeMax = histo.GetXaxis().GetXmax()
        numberOfParameters = 2
        
        print "Fit range ",rangeMin, " - ",rangeMax
        
        theFit = TF1("theFit",FitFunction(),rangeMin,rangeMax,numberOfParameters)
        
        plot = plots.PlotBase()
        plot.histoMgr.appendHisto(histograms.Histo(histo,histo.GetName()))
        plot.createFrame("combinedfit"+self.label, opts={"ymin": 1e-5, "ymaxfactor": 2.})

        histograms.addCmsPreliminaryText()
        histograms.addEnergyText()
        histograms.addLuminosityText(x=None, y=None, lumi=self.lumi)
                                        
	print "data events ",histo.Integral(0,histo.GetNbinsX())

        histo.Fit(theFit,"R")

        theFit.SetRange(histo.GetXaxis().GetXmin(),histo.GetXaxis().GetXmax())
        theFit.SetLineStyle(2)
        theFit.Draw("same")

	par = theFit.GetParameters()

	qcdOnly = TF1("qcdOnly",QCDOnly(),rangeMin,rangeMax,numberOfParameters)
	qcdOnly.FixParameter(0,par[0])
	qcdOnly.FixParameter(1,par[1])
	qcdOnly.SetLineStyle(2)
	qcdOnly.Draw("same")

        histograms.addText(0.35,0.8,"Data, Baseline TauID")
        histograms.addText(0.4,0.3,"QCD",15)


        plot.histoMgr.appendHisto(histograms.Histo(qcdOnly,"qcdOnly"))
        
        plot.getPad().SetLogy(True)

        plot.draw()
        plot.save()
                                        
        fitPars = "fit parameters "
        i = 0
        while i < numberOfParameters:
            fitPars = fitPars + " " + str(par[i])
            i = i + 1
        print fitPars
	nBaseQCD = par[0]
	self.QCDfraction = par[1]
	if len(self.label) > 0:
	    print "Bin ",self.label
        print "Integral     ", nBaseQCD
	print "QCD fraction ",self.QCDfraction

        return theFit
Ejemplo n.º 16
0
    def __call__(self, x, y):
        mass = "m_{H^{#pm}} = %d GeV/c^{2}" % self.mass
        br = "BR(t #rightarrow bH^{#pm})=%.2f" % self.br

        histograms.addText(x, y, mass, size=self.size)
        histograms.addText(x, y - self.separation, br, size=self.size)
Ejemplo n.º 17
0
def main():

    if len(sys.argv) < 2:
        usage()

    dirs = []
    dirs.append(sys.argv[1])

    datasets = dataset.getDatasetsFromMulticrabDirs(dirs,
                                                    dataEra=dataEra,
                                                    searchMode=searchMode,
                                                    analysisName=analysis,
                                                    optimizationMode=optMode)
    datasets.loadLuminosities()
    datasets.updateNAllEventsToPUWeighted()

    plots.mergeRenameReorderForDataMC(datasets)

    datasets.merge("EWK",
                   ["TTJets", "WJets", "DYJetsToLL", "SingleTop", "Diboson"])
    style = tdrstyle.TDRStyle()

    plot = plots.PlotBase()

    legends = {}
    name_re = re.compile("SelectedTau_pT_(?P<name>\S+)")
    for i, histo in enumerate(HISTONAMES):
        plot.histoMgr.appendHisto(purityGraph(i, datasets, histo))
        name = histo
        match = name_re.search(histo)
        if match:
            name = match.group("name")
        legends["Purity%s" % i] = name
        #        if "AfterMetCut"  in name:
        #            legends["Purity%s"%i] = "MET > 60 GeV"
        if "SelectedTau_pT_CollinearCuts" in name:
            legends["Purity%s" % i] = "Collinear cuts"
        if "AfterBtagging" in name:
            legends["Purity%s" % i] = "B tagging"
        if "AfterBveto" in name:
            legends["Purity%s" % i] = "B-jet veto"
        if "AfterBvetoPhiCuts" in name:
            legends["Purity%s" % i] = "B-jet veto, TailKiller"
        if "SelectedTau_pT_BackToBackCuts" in name:
            legends["Purity%s" % i] = "BackToBack cuts"

    plot.createFrame("purityLoose",
                     opts={
                         "xmin": 40,
                         "xmax": 160,
                         "ymin": 0.,
                         "ymax": 1.05
                     })
    plot.frame.GetXaxis().SetTitle("p_{T}^{#tau jet} (GeV/c)")
    plot.frame.GetYaxis().SetTitle("QCD purity")
    #    plot.setEnergy(datasets.getEnergies())

    plot.histoMgr.setHistoLegendLabelMany(legends)

    plot.setLegend(histograms.createLegend(0.3, 0.35, 0.6, 0.5))

    #    histograms.addText(0.2, 0.3, "TailKiller: MediumPlus", 18)
    histograms.addText(0.35, 0.28, "BackToBack cuts: TightPlus", 20)
    histograms.addText(0.35, 0.22, "2011B", 20)

    histograms.addText(0.2, 0.3, "TailKiller: MediumPlus", 18)
    #    histograms.addText(0.2, 0.3, "TailKiller: TightPlus", 18)

    plot.setEnergy(datasets.getEnergies())
    plot.setLuminosity(datasets.getDataset("Data").getLuminosity())
    plot.addStandardTexts()

    plot.draw()
    plot.save()
Ejemplo n.º 18
0
def main():

    if len(sys.argv) < 2:
        usage()

    dirs = []
    dirs.append(sys.argv[1])
        
    datasets = dataset.getDatasetsFromMulticrabDirs(dirs,dataEra=dataEra, searchMode=searchMode, analysisName=analysis, optimizationMode=optMode)
    datasets.loadLuminosities()
    datasets.updateNAllEventsToPUWeighted()

    plots.mergeRenameReorderForDataMC(datasets)

    datasets.merge("EWK", [
                    "TTJets",
                    "WJets",
                    "DYJetsToLL",
                    "SingleTop",
                    "Diboson"
                    ])
    style = tdrstyle.TDRStyle()

    plot = plots.PlotBase()
    

    legends = {}
    name_re = re.compile("SelectedTau_pT_(?P<name>\S+)")
    for i,histo in enumerate(HISTONAMES):
        plot.histoMgr.appendHisto(purityGraph(i,datasets,histo))
        name = histo
        match = name_re.search(histo)
        if match:
            name = match.group("name")
        legends["Purity%s"%i] = name
#        if "AfterMetCut"  in name:    
#            legends["Purity%s"%i] = "MET > 60 GeV"
        if "SelectedTau_pT_CollinearCuts"  in name:    
            legends["Purity%s"%i] = "Collinear cuts"
        if "AfterBtagging"  in name:    
            legends["Purity%s"%i] = "B tagging"
        if "AfterBveto"  in name:    
            legends["Purity%s"%i] = "B-jet veto"
        if "AfterBvetoPhiCuts"  in name:    
            legends["Purity%s"%i] = "B-jet veto, TailKiller"
        if "SelectedTau_pT_BackToBackCuts"  in name:    
            legends["Purity%s"%i] = "BackToBack cuts" 

    plot.createFrame("purityLoose", opts={"xmin": 40, "xmax": 160, "ymin": 0., "ymax": 1.05})
    plot.frame.GetXaxis().SetTitle("p_{T}^{#tau jet} (GeV/c)")
    plot.frame.GetYaxis().SetTitle("QCD purity")
#    plot.setEnergy(datasets.getEnergies())

    
    plot.histoMgr.setHistoLegendLabelMany(legends)

    plot.setLegend(histograms.createLegend(0.3, 0.35, 0.6, 0.5))
    
 
#    histograms.addText(0.2, 0.3, "TailKiller: MediumPlus", 18)
    histograms.addText(0.35, 0.28, "BackToBack cuts: TightPlus", 20)
    histograms.addText(0.35, 0.22, "2011B", 20)


    histograms.addText(0.2, 0.3, "TailKiller: MediumPlus", 18)
#    histograms.addText(0.2, 0.3, "TailKiller: TightPlus", 18)


    plot.setEnergy(datasets.getEnergies())
    plot.setLuminosity(datasets.getDataset("Data").getLuminosity())
    plot.addStandardTexts()

    plot.draw()
    plot.save()
def drawPlot(h,
             name,
             xlabel,
             ylabel="Events / %.0f GeV/c",
             rebin=1,
             log=True,
             ratio=True,
             opts={},
             opts2={},
             moveLegend={},
             **kwargs):
    if rebin > 1:
        h.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin))
    ylab = ylabel
    if "%" in ylabel:
        ylab = ylabel % h.binWidth()

    #scaleNormalization(h)
    #h.stackMCHistograms()

    sigErr = h.histoMgr.getHisto("Normal").getRootHisto().Clone("Normal_err")
    sigErr.SetFillColor(ROOT.kRed - 7)
    sigErr.SetMarkerSize(0)
    sigErr.SetFillStyle(3005)
    h.prependPlotObject(sigErr, "E2")
    if h.histoMgr.hasHisto("Embedded"):
        embErr = h.histoMgr.getHisto("Embedded").getRootHisto().Clone(
            "Embedded_err")
        embErr.SetFillColor(ROOT.kBlue - 7)
        embErr.SetFillStyle(3004)
        embErr.SetMarkerSize(0)
        h.prependPlotObject(embErr, "E2")

    if hasattr(h, "embeddingVariation"):
        h.prependPlotObject(h.embeddingVariation, "[]")
    if hasattr(h, "embeddingDataVariation"):
        h.prependPlotObject(h.embeddingDataVariation, "[]")

    _opts = {"ymin": 0.01, "ymaxfactor": 2}
    if not log:
        _opts["ymin"] = 0
        _opts["ymaxfactor"] = 1.1
    _opts2 = {"ymin": 0.5, "ymax": 1.5}
    _opts.update(opts)
    _opts2.update(opts2)

    if log:
        name = name + "_log"
    h.createFrame(name, createRatio=ratio, opts=_opts, opts2=_opts2)
    h.getPad().SetLogy(log)
    if ratio:
        h.getFrame2().GetYaxis().SetTitle("Ratio")
        # Very, very ugly hack
        if h.histoMgr.hasHisto("EmbeddedData"):
            if h.ratios[1].getName() != "Embedded":
                raise Exception("Assumption failed")
            h.ratios[1].setDrawStyle("PE2")
            rh = h.ratios[1].getRootHisto()
            rh.SetFillColor(ROOT.kBlue - 7)
            rh.SetFillStyle(3004)
            # err = h.ratios[1].getRootHisto().Clone("Embedded_ratio_err")
            # err.SetFillColor(ROOT.kBlue-7)
            # err.SetFillStyle(3004)
            # err.SetMarkerSize(0)
            # h.prependPlotObjectToRatio(err, "E2")

    #yaxis = h.getFrame2().GetYaxis()
    #yaxis.SetTitleSize(yaxis.GetTitleSize()*0.7)
    #yaxis.SetTitleOffset(yaxis.GetTitleOffset()*1.5)
    h.setLegend(
        histograms.moveLegend(
            histograms.moveLegend(histograms.createLegend(), **moveLegend)))
    tmp = sigErr.Clone("tmp")
    tmp.SetFillColor(ROOT.kBlack)
    tmp.SetFillStyle(3013)
    #tmp.SetFillStyle(sigErr.GetFillStyle()); tmp.SetFillColor(sigErr.GetFillColor())
    tmp.SetLineColor(ROOT.kWhite)
    h.legend.AddEntry(tmp, "Stat. unc.", "F")

    x = h.legend.GetX1()
    y = h.legend.GetY1()
    x += 0.05
    y -= 0.03
    if hasattr(h, "embeddingDataVariation"):
        histograms.addText(x,
                           y,
                           "[  ]",
                           size=17,
                           color=h.embeddingDataVariation.GetMarkerColor())
        x += 0.05
        histograms.addText(x, y, "Embedded data min/max", size=17)
        y -= 0.03
    if hasattr(h, "embeddingVariation"):
        histograms.addText(x,
                           y,
                           "[  ]",
                           size=17,
                           color=h.embeddingVariation.GetMarkerColor())
        x += 0.05
        histograms.addText(x, y, "Embedded MC min/max", size=17)
        y -= 0.03

    #if hasattr(h, "embeddingDataVariation"):
    #    h.legend.AddEntry(h.embeddingDataVariation, "Embedded data min/max", "p")
    #if hasattr(h, "embeddingVariation"):
    #    h.legend.AddEntry(h.embeddingVariation, "Embedded MC min/max", "p")

    common(h, xlabel, ylab, **kwargs)
Ejemplo n.º 20
0
    def __call__(self, x, y):
        mass = "m_{H^{#pm}} = %d GeV/c^{2}" % self.mass
        br = "BR(t #rightarrow bH^{#pm})=%.2f" % self.br

        histograms.addText(x, y, mass, size=self.size)
        histograms.addText(x, y-self.separation, br, size=self.size)
def doPlots(mainTable, xvalues, signalDatasets, signalPostfix, consequtive=True):
    allName = "All events"
    cuts = [
        "Trigger and HLT_MET cut",
        "primary vertex",
        "taus == 1",
        "trigger scale factor",
        "electron veto",
        "muon veto",
        "njets",
        "MET",
        "btagging",
        "btagging scale factor",
        "deltaPhiTauMET<160",
        ]

    xerrs = [0]*len(xvalues)
    yvalues = {}
    yerrs = {}
    for cut in cuts:
        yvalues[cut] = []
        yerrs[cut] = []
    for name in signalDatasets:
        column = mainTable.getColumn(name=name)

        # Get the counts (returned objects are of type dataset.Count,
        # and have both value and uncertainty
        allCount = column.getCount(column.getRowNames().index("All events"))
        prevCount = allCount

        for cut in cuts:
            cutCount = column.getCount(column.getRowNames().index(cut))
            eff = cutCount.clone()
            if consequtive:  
                eff.divide(prevCount)
                prevCount = cutCount
            else:
                eff.divide(allCount) # N(cut) / N(all)
        
            yvalues[cut].append(eff.value())
            yerrs[cut].append(eff.uncertainty())

    def createErrors(cutname):
        gr = ROOT.TGraphErrors(len(xvalues), array.array("d", xvalues), array.array("d", yvalues[cutname]),
                               array.array("d", xerrs), array.array("d", yerrs[cutname]))
        gr.SetMarkerStyle(24)
        gr.SetMarkerColor(2)
        gr.SetMarkerSize(2)
        gr.SetLineStyle(1)
        gr.SetLineWidth(4)
        return gr

    def setStyle(gr, lc, ls, ms):
        gr.SetLineColor(lc)
        gr.SetLineStyle(ls)
        gr.SetMarkerColor(lc)
        gr.SetMarkerStyle(ms)

    gtrig = createErrors("Trigger and HLT_MET cut")
    setStyle(gtrig, lc=38, ls=8, ms=20)

    #gtau = createErrors("trigger scale factor")
    gtau = createErrors("taus == 1")
    setStyle(gtau, lc=2, ls=3, ms=21)

    gveto = createErrors("muon veto")
    setStyle(gveto, lc=1, ls=5, ms=22)

    gjets = createErrors("njets")
    setStyle(gjets, lc=4, ls=1, ms=23)

    gmet = createErrors("MET")
    setStyle(gmet, lc=2, ls=2, ms=24)

    gbtag = createErrors("btagging")
    setStyle(gbtag, lc=1, ls=6, ms=24)

    gdphi = createErrors("deltaPhiTauMET<160")
    setStyle(gdphi, lc=9, ls=3, ms=25)
                        
    glist = [gtrig, gtau, gveto, gjets, gmet, gbtag, gdphi]
    
    #opts = {"xmin": 75, "xmax": 165, "ymin": 0.001}
    opts = {"xmin": 75, "xmax": 165, "ymin": 7e-4, "ymax": 2e-1}
    name = "SignalEfficiency"
    if consequtive:
        opts.update({"ymin": 2.5e-2, "ymax": 1.15})
        name += "Conseq"
    name += "_"+signalPostfix

    canvasFrame = histograms.CanvasFrame([histograms.HistoGraph(g, "", "") for g in glist], name, **opts)
    canvasFrame.frame.GetYaxis().SetTitle("Selection efficiency")
    canvasFrame.frame.GetXaxis().SetTitle("m_{H^{+}} (GeV/c^{2})")
    canvasFrame.canvas.SetLogy(True)
    canvasFrame.frame.Draw()

    for gr in glist:
        gr.Draw("PL same")
    
    histograms.addEnergyText()
    histograms.addCmsPreliminaryText(text="Simulation")

    legend = histograms.createLegend(x1=0.5, y1=0.5, x2=0.85, y2=0.75)
    legend = histograms.moveLegend(legend, dx=-0.3, dy=-0.04)
    if not consequtive and signalPostfix == "HH":
        legend = histograms.moveLegend(legend, dy=0.05)

    legend.AddEntry(gtrig,"Trigger", "lp"); 
#    legend.AddEntry(gtau, "#tau-jet identification", "lp"); 
    legend.AddEntry(gtau, "#tau_{h} identification", "lp"); 
    legend.AddEntry(gveto ,"lepton vetoes", "lp"); 
    legend.AddEntry(gjets ,"3 jets", "lp"); 
    legend.AddEntry(gmet,"E_{T}^{miss}", "lp")
    legend.AddEntry(gbtag,"b tagging", "lp")
#    legend.AddEntry(gdphi,"#Delta#phi(#tau, E_{T}^{miss})<160^{o} ", "lp")
    legend.AddEntry(gdphi,"#Delta#phi(#tau_{h}, E_{T}^{miss})<160^{o} ", "lp")
    legend.Draw()

    process = {    
        "HW": "t#bar{t} #rightarrow W^{+}bH^{-}#bar{b}",
        "HH": "t#bar{t} #rightarrow H^{+}bH^{-}#bar{b}"
        }[signalPostfix]

    histograms.addText(x=legend.GetX1()+0.02, y=legend.GetY2()+0.01,
                       text=process, size=17)

    canvasFrame.canvas.SaveAs(".png")
    canvasFrame.canvas.SaveAs(".C")
    canvasFrame.canvas.SaveAs(".eps")
Ejemplo n.º 22
0
    def fitEWK(self,histo,options="R"):

        rangeMin = histo.GetXaxis().GetXmin()
        rangeMax = histo.GetXaxis().GetXmax()
#	rangeMin = 120
#	rangeMax = 120

        numberOfParameters = 4

        print "Fit range ",rangeMin, " - ",rangeMax

        class FitFunction:
            def __call__( self, x, par ):
                return EWKFunction(x,par,1,1)
#		return SumFunction(x,par)
#	        return TestFunction(x,par,1)
	class PlotFunction:
	    def __call__( self, x, par ):
		return EWKFunction(x,par,0)

        theFit = TF1('theFit',FitFunction(),rangeMin,rangeMax,numberOfParameters)
	thePlot = TF1('thePlot',PlotFunction(),rangeMin,rangeMax,numberOfParameters)

        theFit.SetParLimits(0,5,30)
        theFit.SetParLimits(1,90,120)
        theFit.SetParLimits(2,30,50) 
        theFit.SetParLimits(3,0.001,1)


        if self.label == "4050":
            theFit.SetParLimits(0,5,20) 
            theFit.SetParLimits(1,90,120)
            theFit.SetParLimits(2,30,50)
            theFit.SetParLimits(3,0.001,1)

	if self.label == "5060":
            theFit.SetParLimits(0,5,20)     
            theFit.SetParLimits(1,90,120)   
            theFit.SetParLimits(2,20,50)
            theFit.SetParLimits(3,0.001,1)

        if self.label == "6070":
            theFit.SetParLimits(0,5,50)
            theFit.SetParLimits(1,90,150)
            theFit.SetParLimits(2,20,50)
            theFit.SetParLimits(3,0.001,1)

        if self.label == "7080":
            theFit.SetParLimits(0,5,60)
            theFit.SetParLimits(1,90,200)
            theFit.SetParLimits(2,20,100)
            theFit.SetParLimits(3,0.001,1)

        if self.label == "80100":
            theFit.SetParLimits(0,5,50)
            theFit.SetParLimits(1,50,170)
            theFit.SetParLimits(2,20,60)
            theFit.SetParLimits(3,0.001,1)

        if self.label == "100120":
            theFit.SetParLimits(0,5,50)
            theFit.SetParLimits(1,90,170)
            theFit.SetParLimits(2,20,60) 
            theFit.SetParLimits(3,0.001,1)

        if self.label == "120150":
            theFit.SetParLimits(0,5,50)
            theFit.SetParLimits(1,60,170)
            theFit.SetParLimits(2,10,100)
            theFit.SetParLimits(3,0.001,1)

        if self.label == "150":
            theFit.SetParLimits(0,5,50)
            theFit.SetParLimits(1,70,170)
            theFit.SetParLimits(2,20,100)
            theFit.SetParLimits(3,0.001,1)


        plot = plots.PlotBase()
        plot.histoMgr.appendHisto(histograms.Histo(histo,histo.GetName()))
        plot.createFrame("ewkfit"+self.label, opts={"ymin": 1e-5, "ymaxfactor": 2.})

        histograms.addCmsPreliminaryText()
        histograms.addEnergyText()
        histograms.addLuminosityText(x=None, y=None, lumi=self.lumi)
                        
	self.normEWK = histo.Integral(0,histo.GetNbinsX())

	histo.Scale(1/self.normEWK)

	histo.Fit(theFit,options) 
       
        theFit.SetRange(histo.GetXaxis().GetXmin(),histo.GetXaxis().GetXmax())
        theFit.SetLineStyle(2)
        theFit.Draw("same")

        self.parMCEWK = theFit.GetParameters()
        
        fitPars = "fit parameters "

	i = 0
	while i < numberOfParameters:
	    fitPars = fitPars + " " + str(self.parMCEWK[i])
	    thePlot.SetParameter(i,theFit.GetParameter(i))
	    i = i + 1
	thePlot.Draw("same")

        histograms.addText(0.2,0.2,"EWK MC, baseline TauID")

        plot.histoMgr.appendHisto(histograms.Histo(theFit,"Fit"))

        plot.getPad().SetLogy(True)

        plot.draw()
        plot.save()
                           
        self.parMCEWK = theFit.GetParameters()
        
        print fitPars
        self.nMCEWK = theFit.Integral(0,1000,self.parMCEWK)
        print "Integral ",self.normEWK*self.nMCEWK
Ejemplo n.º 23
0
    def Save(self,name):

        hObserved   = self.CreateGraph("Observed")
	hExpected   = self.CreateGraph("Expected")
	hExpected1s = self.CreateGraph("Expected1")
	hExpected1s.SetFillColor(ROOT.kYellow)
	hExpected2s = self.CreateGraph("Expected2")
	hExpected2s.SetFillColor(ROOT.kOrange)

	style = tdrstyle.TDRStyle()

	plot = plots.ComparisonManyPlot(
	    histograms.HistoGraph(hObserved, "Observed"),
	    [
	     histograms.HistoGraph(hExpected, "Expected"),
	     histograms.HistoGraph(hExpected1s, "Expected1"),
	     histograms.HistoGraph(hExpected2s, "Expected2")
	     ]
	)

	obsStyle = styles.getDataStyle().clone()
	plot.histoMgr.forHisto("Observed", styles.getDataStyle().clone())
	plot.histoMgr.setHistoDrawStyle("Observed", "PL")

	expStyle = styles.getDataStyle().clone()
	expStyle.append(styles.StyleLine(lineStyle=2))
	expStyle.append(styles.StyleLine(lineColor=ROOT.kRed))
	expStyle.append(styles.StyleMarker(markerStyle=ROOT.kFullSquare))
	expStyle.append(styles.StyleMarker(markerColor=ROOT.kRed))
	plot.histoMgr.forHisto("Expected", expStyle)
	plot.histoMgr.setHistoDrawStyle("Expected", "PL")
	plot.histoMgr.setHistoDrawStyle("Expected1", "PL3")
	plot.histoMgr.setHistoDrawStyle("Expected2", "PL3")

        plot.createFrame(name, opts={"xmin": 70.1, "xmax": 169.9, "ymin":0, "ymax": 0.2})
        plot.frame.GetXaxis().SetTitle(self.xtitle)
        plot.frame.GetYaxis().SetTitle(self.ytitle)


	plot.histoMgr.setHistoLegendStyle("Observed", "PL")
	plot.histoMgr.setHistoLegendStyle("Expected", "PL")
	plot.histoMgr.setHistoLegendStyle("Expected1", "F")
	plot.histoMgr.setHistoLegendStyle("Expected2", "F")

        plot.histoMgr.setHistoLegendLabelMany({
            "Expected": "Expected median",
            "Expected1": "Expected median #pm1#sigma",
            "Expected2": "Expected median #pm2#sigma"
            })
        plot.setLegend(histograms.createLegend(0.55,0.68,0.9,0.93))
        
        histograms.addCmsPreliminaryText()
        histograms.addEnergyText()
        histograms.addLuminosityText(x=None, y=None, lumi=self.lumi)

	textSize = 16
	textX    = 0.19
	textY    = 0.8
	textDY   = 0.038
	histograms.addText(textX,textY+2*textDY,"t#rightarrowbH^{#pm}, H^{#pm}#rightarrow#tau#nu",textSize)
	histograms.addText(textX,textY+textDY,"Fully hadronic final state",textSize)
	histograms.addText(textX,textY,"BR(H^{#pm}#rightarrow#tau^{#pm} #nu) = 1",textSize)
        
        plot.draw()
        plot.save()
def drawPlot(h, name, xlabel, ylabel="Events / %.0f GeV/c", rebin=1, log=True, ratio=True, opts={}, opts2={}, moveLegend={}, **kwargs):
    if rebin > 1:
        h.histoMgr.forEachHisto(lambda h: h.getRootHisto().Rebin(rebin))
    ylab = ylabel
    if "%" in ylabel:
        ylab = ylabel % h.binWidth()

    #scaleNormalization(h)
    #h.stackMCHistograms()

    sigErr = h.histoMgr.getHisto("Normal").getRootHisto().Clone("Normal_err")
    sigErr.SetFillColor(ROOT.kRed-7)
    sigErr.SetMarkerSize(0)
    sigErr.SetFillStyle(3005)
    h.prependPlotObject(sigErr, "E2")
    if h.histoMgr.hasHisto("Embedded"):
        embErr = h.histoMgr.getHisto("Embedded").getRootHisto().Clone("Embedded_err")
        embErr.SetFillColor(ROOT.kBlue-7)
        embErr.SetFillStyle(3004)
        embErr.SetMarkerSize(0)
        h.prependPlotObject(embErr, "E2")

    if hasattr(h, "embeddingVariation"):
        h.prependPlotObject(h.embeddingVariation, "[]")
    if hasattr(h, "embeddingDataVariation"):
        h.prependPlotObject(h.embeddingDataVariation, "[]")


    _opts = {"ymin": 0.01, "ymaxfactor": 2}
    if not log:
        _opts["ymin"] = 0
        _opts["ymaxfactor"] = 1.1
    _opts2 = {"ymin": 0.5, "ymax": 1.5}
    _opts.update(opts)
    _opts2.update(opts2)

    if log:
        name = name + "_log"
    h.createFrame(name, createRatio=ratio, opts=_opts, opts2=_opts2)
    h.getPad().SetLogy(log)
    if ratio:
        h.getFrame2().GetYaxis().SetTitle("Ratio")
        # Very, very ugly hack
        if h.histoMgr.hasHisto("EmbeddedData"):
            if h.ratios[1].getName() != "Embedded":
                raise Exception("Assumption failed")
            h.ratios[1].setDrawStyle("PE2")
            rh = h.ratios[1].getRootHisto()
            rh.SetFillColor(ROOT.kBlue-7)
            rh.SetFillStyle(3004)
            # err = h.ratios[1].getRootHisto().Clone("Embedded_ratio_err")
            # err.SetFillColor(ROOT.kBlue-7)
            # err.SetFillStyle(3004)
            # err.SetMarkerSize(0)
            # h.prependPlotObjectToRatio(err, "E2")

    #yaxis = h.getFrame2().GetYaxis()
    #yaxis.SetTitleSize(yaxis.GetTitleSize()*0.7)
    #yaxis.SetTitleOffset(yaxis.GetTitleOffset()*1.5)
    h.setLegend(histograms.moveLegend(histograms.moveLegend(histograms.createLegend(), **moveLegend)))
    tmp = sigErr.Clone("tmp")
    tmp.SetFillColor(ROOT.kBlack)
    tmp.SetFillStyle(3013)
    #tmp.SetFillStyle(sigErr.GetFillStyle()); tmp.SetFillColor(sigErr.GetFillColor())
    tmp.SetLineColor(ROOT.kWhite)
    h.legend.AddEntry(tmp, "Stat. unc.", "F")

    x = h.legend.GetX1()
    y = h.legend.GetY1()
    x += 0.05; y -= 0.03
    if hasattr(h, "embeddingDataVariation"):
        histograms.addText(x, y, "[  ]", size=17, color=h.embeddingDataVariation.GetMarkerColor()); x += 0.05
        histograms.addText(x, y, "Embedded data min/max", size=17); y-= 0.03
    if hasattr(h, "embeddingVariation"):
        histograms.addText(x, y, "[  ]", size=17, color=h.embeddingVariation.GetMarkerColor()); x += 0.05
        histograms.addText(x, y, "Embedded MC min/max", size=17); y-= 0.03

    #if hasattr(h, "embeddingDataVariation"):
    #    h.legend.AddEntry(h.embeddingDataVariation, "Embedded data min/max", "p")
    #if hasattr(h, "embeddingVariation"):
    #    h.legend.AddEntry(h.embeddingVariation, "Embedded MC min/max", "p")

    common(h, xlabel, ylab, **kwargs)