Ejemplo n.º 1
0
def plotUpperLimits(resultdicts, scanlabels, xlabel, ylabel, outpath):
    # see CMS plot guidelines: https://ghm.web.cern.ch/ghm/plots/
    tgraphs = []
    tgraphs_observed = []
    up2s = []
    colors = [
        ROOT.kBlack, ROOT.kBlue, ROOT.kRed, 41, ROOT.kGray + 1,
        ROOT.kMagenta + 2, ROOT.kOrange + 7, ROOT.kCyan + 2
    ]
    markers = [20, 21, 22, 23, 24, 25, 26, 32]
    if len(resultdicts) == 2:
        markers = [23, 24]
    for k, r in enumerate(resultdicts):
        values = []
        for key in r.keys():
            values.append(int(key))
        N = len(values)
        values = sorted(values)
        median = ROOT.TGraph(N)  # median line
        observed = ROOT.TGraph(N)  # observed line
        i = 0
        for v in values:
            limit = r[str(v)]
            if unblind and len(limit) < 6:
                raise Exception("Not enougth entries in limit to unblind")
            up2s.append(limit[2])
            if unblind:
                observed.SetPoint(i, values[i], limit[5])  # observed
            median.SetPoint(i, values[i], limit[2])  # median
            i = i + 1
        tgraphs.append(median)
        if unblind: tgraphs_observed.append(observed)
    W = 800
    H = 600
    T = 0.08 * H
    B = 0.12 * H
    L = 0.12 * W
    R = 0.04 * W
    c = ROOT.TCanvas("c", "c", 100, 100, W, H)
    c.SetFillColor(0)
    c.SetBorderMode(0)
    c.SetFrameFillStyle(0)
    c.SetFrameBorderMode(0)
    c.SetLeftMargin(L / W)
    c.SetRightMargin(R / W)
    c.SetTopMargin(T / H)
    c.SetBottomMargin(B / H)
    c.SetTickx(0)
    c.SetTicky(0)
    c.SetGrid()
    c.cd()
    frame = c.DrawFrame(1.4, 0.001, 4.1, 10)
    frame.GetYaxis().CenterTitle()
    frame.GetYaxis().SetTitleSize(0.05)
    frame.GetXaxis().SetTitleSize(0.05)
    frame.GetXaxis().SetLabelSize(0.04)
    frame.GetYaxis().SetLabelSize(0.04)
    frame.GetYaxis().SetTitleOffset(0.9)
    frame.GetXaxis().SetNdivisions(508)
    frame.GetYaxis().CenterTitle(True)
    frame.GetYaxis().SetTitle(
        "95% upper limit on #sigma (#Chi#rightarrow HH) [pb]")
    frame.GetXaxis().SetTitle(xlabel)
    frame.SetMinimum(miny)
    frame.SetMaximum(max(up2s) * 1.05)
    if logy:
        frame.SetMaximum(max(up2s) * 15)
    frame.GetXaxis().SetLimits(min(values), max(values))
    if logy:
        c.SetLogy()
    if (maxy > 0.): frame.SetMaximum(maxy)
    tgraphs[0].Draw()
    for i, g in enumerate(tgraphs):
        g.SetLineColor(colors[i])
        print scanlabels.split(":")[i], markers[i]
        g.SetMarkerColor(colors[i])
        g.SetMarkerStyle(markers[i])
        g.SetMarkerSize(1.2)
        if not unblind:
            g.SetLineWidth(2)
            g.Draw("PLSame")
        else:
            g.SetLineStyle(2)
            g.SetLineWidth(1)
            g.Draw("LSame")
    for i, g in enumerate(tgraphs_observed):
        g.SetLineColor(colors[i])
        print scanlabels.split(":")[i], markers[i]
        g.SetMarkerColor(colors[i])
        g.SetMarkerStyle(markers[i])
        g.SetMarkerSize(1.2)
        g.SetLineWidth(2)
        g.Draw("PLSame")

    CMS_lumi.lumi_sqrtS = ylabel
    CMS_lumi.CMS_lumi(c, 0, 11)
    ROOT.gPad.SetTicks(1, 1)
    frame.Draw('sameaxis')

    #x1 = 0.459
    x1 = 0.3
    x2 = 0.959
    y2 = 0.9175
    y1 = 0.6675
    legend = ROOT.TLegend(x1, y1, x2, y2)
    #legend.SetFillStyle(0)
    #legend.SetFillColor(1)
    legend.SetNColumns(3)
    legend.SetBorderSize(0)
    legend.SetTextSize(0.041)
    legend.SetTextFont(42)
    if unblind:
        for i, g in enumerate(tgraphs_observed):
            legend.AddEntry(g, scanlabels.split(":")[i], 'PL')
        legend.AddEntry(tgraphs[0], 'expected', 'L')
    else:
        for i, g in enumerate(tgraphs):
            legend.AddEntry(g, scanlabels.split(":")[i], 'PL')
    legend.Draw()
    print " "
    c.SaveAs(outpath)
    c.Close()
Ejemplo n.º 2
0
  mg_data.Draw("Ape0")
  # histolist[0].Draw("HIST E")
 #  for h in histolist:
 #    h.Draw("HIST E same)")
  # if(histolist[0]):histolist[0].Draw("pe0")
  mg_data.SetMaximum(histolist[0].GetMaximum()*1.3)
  mg_data.GetXaxis().SetNdivisions(405)
  mg_data.GetXaxis().SetTitleSize(0.06)
  mg_data.GetXaxis().SetTitleOffset(0.95)
  mg_data.GetYaxis().SetTitleOffset(1.3)
  mg_data.GetXaxis().SetLabelSize(0.05)
  mg_data.GetYaxis().SetTitleSize(0.06)
  mg_data.GetYaxis().SetLabelSize(0.04)
  mg_data.GetXaxis().SetTitle("Diboson invariant mass [GeV]")
  mg_data.GetYaxis().SetTitle("Mistagging rate")
  CMS_lumi.CMS_lumi(canvas, iPeriod, iPos)
  SetOwnership( l, 1 )
  # l.Draw()
  l2.Draw()
  addInfo.Draw("same")

  cname =" all-hadronic-plots/BkgEff/QCD_" +cat+"_VV_MistaggingRateEff.pdf"
  print "saving canvas %s" %cname
  canvas.SaveAs(cname)
  cname =outdir +"/QCD_" +cat+"_VV_MistaggingRateEff.pdf"
  print "saving canvas %s" %cname
  canvas.SaveAs(cname)
  
  cname =" all-hadronic-plots/BkgEff/QCD_" +cat+"_VV_MistaggingRateEff.C"
  print "saving canvas %s" %cname
  canvas.SaveAs(cname)
Ejemplo n.º 3
0
hist2.GetYaxis().SetTitleOffset(0.8)

hist1.SetMarkerStyle(24)
hist2.SetMarkerStyle(24)
hist2.SetMarkerColor(kRed)
hist2.Draw()
#hist3.SetLineColor(kBlue)
#hist3.Draw('SAME')
hist1.SetMarkerColor(kBlue)
hist1.Draw('SAME')

#############################################

leg = TLegend(0.7, 0.7, 0.89, 0.89)
leg.SetFillColor(kWhite)
leg.AddEntry(hist1, 'Z prime 2 TeV', 'P')
leg.AddEntry(hist2, 'Z prime 3 TeV ', 'P')
#leg.AddEntry(hist3,'Down Variation', 'l')
#leg.SetLineColor(kWhite)
#leg.SetHeader('Legend')
leg.Draw()

CMS_lumi.CMS_lumi(c1, 4, iPos)

c1.cd()
c1.Update()

#c1.SaveAs(keyn[0][0]+'.png')
#c1.Write()
############################################
def plot_all(w, ch="el", reg='sig'):

    # These things just have to be kept in memory so that ROOT does not make them disappear in the next loop
    pads = []
    paveTexts = []
    legendsMWV = []

    canvas = TCanvas(ch, ch, 800, 572)
    pad1 = TPad('pad', 'pad', 0., 0., 1., 1.)
    pads.append(pad1)
    # Main MWV plot
    p = plot(w, fitres, normset, ch, reg)
    p.GetXaxis().SetTitle('m_{WV} (GeV)')
    p.GetXaxis().SetTitleSize(0.07)
    p.GetXaxis().SetTitleOffset(0.8)
    p.GetXaxis().SetLabelSize(0.05)
    p.GetYaxis().SetRangeUser(7e-2, 1e4)
    p.GetYaxis().SetTitle('Events / 100 GeV')
    p.GetYaxis().SetTitleSize(0.07)
    p.GetYaxis().SetTitleOffset(0.7)
    p.GetYaxis().SetLabelSize(0.05)

    canvas.cd()
    pad1.Draw()

    pad1.cd()
    pad1.SetLogy()
    pad1.SetTicky()
    pad1.SetBottomMargin(0.13)
    p.Draw()

    # Lumi text and channel
    pad1.cd()
    #if reg=='sb_lo':
    CMS_lumi.lumiTextSize = 0.0
    CMS_lumi.writeExtraText = True
    CMS_lumi.extraText = "Simulation"
    CMS_lumi.cmsTextSize = 0.75
    CMS_lumi.extraOverCmsTextSize = 0.57
    CMS_lumi.relPosY = -0.09
    CMS_lumi.relExtraDX = 0.15
    CMS_lumi.relExtraDY = 0.4
    CMS_lumi.CMS_lumi(pad1, 4, 11)
    #elif reg=='sb_hi':
    CMS_lumi.cmsTextSize = 0.0
    CMS_lumi.writeExtraText = False
    CMS_lumi.lumiTextSize = 0.65
    CMS_lumi.lumiTextOffset = 0.2
    CMS_lumi.CMS_lumi(pad1, 4, 11)

    # Legend
    legMWV = TLegend(0.5, 0.4625, 0.88, 0.9)
    legMWV.SetFillColor(0)
    legMWV.SetFillStyle(0)
    legMWV.SetBorderSize(0)
    legMWV.SetLineColor(0)
    legMWV.SetLineWidth(0)
    legMWV.SetLineStyle(0)
    legMWV.SetTextFont(42)
    legMWV.AddEntry(p.getObject(11), "Signal c_{WWW}/#Lambda^{2}=3.6 TeV^{-2}",
                    "L")
    legMWV.AddEntry(p.getObject(0), "W+jets", "F")
    legMWV.AddEntry(p.getObject(1), "t#bar{t}", "F")
    legMWV.AddEntry(p.getObject(4), "WW", "F")
    legMWV.AddEntry(p.getObject(5), "WZ", "F")
    legMWV.AddEntry(p.getObject(8), "Single t", "F")
    legMWV.AddEntry(p.getObject(10), "Uncertainty", "F")
    legMWV.Draw()
    legendsMWV.append(legMWV)

    canvas.Update()
    canvas.SaveAs('prefit_%s_mWV_%s.pdf' % (ch, reg))
    raw_input(ch)

    for i in pads:
        i.Delete()
Ejemplo n.º 5
0
    def DrawText(self):
        #redraw axes
        self.c.RedrawAxis()
        # white background
        graphWhite = rt.TGraph(5)
        graphWhite.SetName("white")
        graphWhite.SetTitle("white")
        graphWhite.SetFillColor(rt.kWhite)
        graphWhite.SetFillStyle(1001)
        graphWhite.SetLineColor(rt.kBlack)
        graphWhite.SetLineStyle(1)
        graphWhite.SetLineWidth(3)
        graphWhite.SetPoint(0, self.model.Xmin, self.model.Ymax)
        graphWhite.SetPoint(1, self.model.Xmax, self.model.Ymax)
        graphWhite.SetPoint(2, self.model.Xmax, self.model.Ymax * 0.82)
        graphWhite.SetPoint(3, self.model.Xmin, self.model.Ymax * 0.82)
        #graphWhite.SetPoint(2,self.model.Xmax, self.model.Ymax*0.8)
        #graphWhite.SetPoint(3,self.model.Xmin, self.model.Ymax*0.8)
        graphWhite.SetPoint(4, self.model.Xmin, self.model.Ymax)
        graphWhite.Draw("FSAME")
        graphWhite.Draw("LSAME")
        self.c.graphWhite = graphWhite
        CMS_lumi.writeExtraText = 1
        CMS_lumi.extraText = "Preliminary"
        #CMS_lumi.lumi_13TeV="2.3 fb^{-1}"
        CMS_lumi.lumi_13TeV = "12.9 fb^{-1}"

        CMS_lumi.lumi_sqrtS = "13 TeV"
        iPos = 0
        CMS_lumi.CMS_lumi(self.c, 4, iPos)
        # CMS LABEL
        textCMS = rt.TLatex(0.25, 0.96, "  %s " % (self.preliminary))
        textCMS.SetNDC()
        textCMS.SetTextAlign(13)
        textCMS.SetTextFont(52)
        textCMS.SetTextSize(0.038)
        #textCMS.Draw()
        self.c.textCMS = textCMS
        # MODEL LABEL
        if self.model.extraText:
            textModelLabel = rt.TLatex(0.17, 0.91, "%s" % self.model.label)
        else:
            textModelLabel = rt.TLatex(0.17, 0.91, "%s" % self.model.label)
        textModelLabel.SetNDC()
        textModelLabel.SetTextAlign(13)
        textModelLabel.SetTextFont(42)
        textModelLabel.SetTextSize(0.035)
        #textModelLabel.SetTextSize(0.03)
        textModelLabel.Draw()
        self.c.textModelLabel = textModelLabel
        # NLO NLL XSEC
        textNLONLL = rt.TLatex(0.15, 0.8625, "NLO+NLL exclusion")
        textNLONLL.SetNDC()
        textNLONLL.SetTextAlign(13)
        textNLONLL.SetTextFont(42)
        textNLONLL.SetTextSize(0.035)
        #         if self.model.extraText :
        #             textNLONLL.Draw()
        self.c.textNLONLL = textNLONLL

        if self.model.extraText:
            xRange = self.model.Xmax - self.model.Xmin
            yRange = self.model.Ymax - self.model.Ymin

            textExtra1 = rt.TLatex(0.17, 0.81, self.model.extratext1)
            textExtra1.SetNDC()
            textExtra1.SetTextFont(42)
            textExtra1.SetTextSize(0.030)
            textExtra1.Draw()
            self.c.textExtra1 = textExtra1

            textExtra2 = rt.TLatex(0.17, 0.7, self.model.extratext2)
            textExtra2.SetNDC()
            textExtra2.SetTextFont(42)
            textExtra2.SetTextSize(0.030)
            textExtra2.Draw()
            self.c.textExtra2 = textExtra2
Ejemplo n.º 6
0
def loopIntoIt(files, key, outputFolder):
    #############################################
    if (key.IsA().InheritsFrom("TDirectory")):
        #print key.GetName(), "is a directory in ",key.GetPath()
        here = key.GetPath().split(":", 1)[1]
        #print here
        ROOT.gSystem.MakeDirectory(outputFolder + here)
        files[0].cd(str(key.GetPath()))
        the_dir = ROOT.gDirectory
        dirList = ROOT.gDirectory.GetListOfKeys()
        for k in dirList:
            obj_array = []
            obj1 = k.ReadObj()
            if (obj1.IsA().InheritsFrom("TH1")
                ):  #and "h2_" not in obj1.GetName()):
                if (obj1.IsA().InheritsFrom("TH2")):
                    continue

                increment_count()
                print "processed ", nplots, " histograms"
                #if (nplots>10):
                #    return

                #print obj1.GetName()," is an histogram in ",key.GetPath()

                listOfAcceptedHistograms = ["Residuals"]

                searchpath = key.GetPath().split(":/", 1)[1]
                if (listOfAcceptedHistograms[0]
                        in key.GetPath()):  #obj1.GetName()):
                    continue

                for the_file in files:
                    the_file.cd(searchpath)
                    kf = ROOT.gDirectory.GetListOfKeys().FindObject(
                        obj1.GetName())
                    objf = kf.ReadObj()
                    obj_array.append(objf)

                arr = []
                for h1 in obj_array:
                    if (h1.GetSumOfWeights() !=
                            0):  #and ("p_" not in obj1.GetName())):
                        ##h1.Scale(100/h1.GetSumOfWeights())
                        ##h1.Scale(1/1000.)
                        arr.append(h1)

                the_extrema = getExtrema(arr)
                for h1 in obj_array:
                    if thetypes[obj_array.index(h1)]:
                        doFill = False
                    else:
                        #if (obj_array.index(h1)>0):
                        doFill = True
                        #print "themarker is :",themarkers[obj_array.index(h1)]
                    makeNicePlotStyle(h1, thecolors[obj_array.index(h1)],
                                      themarkers[obj_array.index(h1)],
                                      the_extrema, doFill)

                compound = str(obj1.GetName()) + "_" + str(key.GetName())

                #####################################
                ##
                ## Standard plot canvas
                ##
                #####################################

                c1 = ROOT.TCanvas("c1_" + compound, "c1_" + compound, 800, 800)
                c1.cd()

                if ("prof_" not in obj1.GetName()):
                    for h1 in obj_array:
                        if thetypes[obj_array.index(h1)]:
                            if obj_array.index(h1) == 0:
                                h1.Draw("PE1")
                            else:
                                h1.Draw("PE1sames")
                        else:
                            if obj_array.index(h1) == 0:
                                h1.Draw("HIST")
                            else:
                                h1.Draw("HISTsames")
                else:
                    obj_array[0].Draw("PE1")
                    for h1 in obj_array:
                        h1.Draw("PE1sames")

                CMS_lumi.CMS_lumi(c1, iPeriod, iPos)
                c1.Draw()

                clones = []
                for h1 in obj_array:
                    clone = h1.Clone()
                    clones.append(clone)

                    #stats = h1.FindObject("stats")
                    #makeNiceStats(stats,obj_array.index(h1))
                    #stats.Draw("same")

                myleg = makeNiceTLegend(obj_array, thelabels)
                myleg.Draw("same")
                (p1, p2, p3) = makeNicePaveTest()
                #p1.Draw("same")
                #p2.Draw("same")
                #p3.Draw("same")

                #c1.Print()
                #c1.RedrawAxis()
                #frame = c1.GetFrame()
                #frame.Draw()

                c1.SaveAs(outputFolder + here + "/c1_" + compound + ".png")
                c1.SaveAs(outputFolder + here + "/c1_" + compound + ".pdf")
                #c1.SaveAs(outputFolder+here+"/c1_"+compound+".root")

                #####################################
                ##
                ## ratio plot canvas
                ##
                #####################################

                c1ratio = ROOT.TCanvas("c1_ratio_%s" % c1.GetName(),
                                       "c1_ratio_%s" % c1.GetName(), 800, 800)
                # upper pad
                pad = ROOT.TPad("mainPad_%s" % c1.GetName(),
                                "mainPad_%s" % c1.GetName(), 0., 0.17, 1., 1.)
                pad.SetFillStyle(4000)
                ## lower pad
                pad_ratio = ROOT.TPad('ratioPad_%s' % c1.GetName(),
                                      'ratioPad_%s' % c1.GetName(), 0., 0., 1.,
                                      0.29)
                pad_ratio.SetFillStyle(4000)
                pad_ratio.SetBottomMargin(0.45)
                pad.Draw()
                pad_ratio.Draw()

                pad.cd()

                ratio_hists = []
                denom_hists = []
                for clone in clones:
                    ratio = clone.Clone(clone.GetName() +
                                        "_%s" % clones.index(clone))
                    if ("prof_" in obj1.GetName()
                            and obj1.IsA().InheritsFrom("TProfile")):
                        ratio = ratio.ProjectionX()

                        #### old logic
                        # if (clones.index(clone)!=0):
                        #     ratio_hists.append(ratio)
                        #     if ("p_" not in obj1.GetName()):
                        #         clone.Draw("HISTsames")
                        #     else:
                        #         clone.Draw("HISTsames")
                        # else:
                        #     denom_hists.append(ratio)
                        #     if ("p_" not in obj1.GetName()):
                        #         clone.Draw("PE1")
                        #     else:
                        #         clone.Draw("PE1")

                    if thetypes[clones.index(clone)]:
                        # if this is data
                        if clones.index(clone) == 0:
                            denom_hists.append(ratio)
                            clone.Draw("PE1")
                        else:
                            ratio_hists.append(ratio)
                            clone.Draw("PE1same")
                    else:
                        # if this is mc
                        if clones.index(clone) == 0:
                            denom_hists.append(ratio)
                            clone.Draw("HIST")
                        else:
                            ratio_hists.append(ratio)
                            clone.Draw("HISTsame")

                    #stats = clone.FindObject("stats")
                    #makeNiceStats(stats,clones.index(clone))
                    #stats.Draw("same")

                    clone.GetXaxis().SetLabelSize(0.)

                myleg.Draw("same")
                (p1r, p2r, p3r) = makeNicePaveTest(True)
                #p1r.Draw("same")
                #p2r.Draw("same")
                #p3r.Draw("same")

                pad_ratio.cd()

                nbins = obj1.GetNbinsX()
                flatline = ROOT.TH1F("flatline_%s" % c1.GetName(),
                                     "flatline_%s" % c1.GetName(), nbins,
                                     obj1.GetXaxis().GetBinLowEdge(1),
                                     obj1.GetXaxis().GetBinLowEdge(nbins + 1))

                flatline.SetMarkerSize(0)
                makeNicePlotStyle(flatline, ROOT.kBlue, 20, (0., 2.))
                flatline.SetLineColor(ROOT.kBlue)
                flatline.SetLineStyle(9)
                flatline.SetFillStyle(0)
                flatline.SetLineWidth(2)
                flatline.SetTitle("")

                for i in xrange(1, nbins + 1):
                    flatline.SetBinContent(i, 1)
                    flatline.SetBinError(i, 0)

                for ratio in ratio_hists:
                    ratio.Divide(denom_hists[0])
                    ratio.SetTitle("")
                    makeNicePlotStyle(ratio,
                                      thecolors[ratio_hists.index(ratio) + 1],
                                      themarkers[ratio_hists.index(ratio) + 1],
                                      (0., 2.))
                    ratio.SetLineColor(thecolors[ratio_hists.index(ratio) + 1])
                    ratio.GetXaxis().SetTitleSize(0.19)
                    ratio.GetYaxis().SetTitleSize(0.19)
                    ratio.GetXaxis().SetTitleOffset(1.0)
                    ratio.GetYaxis().SetTitleOffset(0.45)
                    ratio.GetXaxis().SetLabelFont(42)
                    ratio.GetYaxis().SetLabelFont(42)
                    ratio.GetXaxis().SetLabelOffset(0.009)
                    ratio.GetYaxis().SetLabelOffset(0.009)
                    ratio.GetYaxis().SetLabelSize(0.16)
                    ratio.GetXaxis().SetLabelSize(0.16)
                    ratio.GetYaxis().SetNdivisions(505)
                    ratio.GetYaxis().SetRangeUser(0., 1.89)
                    ratio.GetYaxis().SetTitle("ratio")
                    if (ratio_hists.index(ratio) == 0):
                        ratio.Draw("P")
                    else:
                        ratio.Draw("Psames")
                    ratio.Draw("e1sames")
                    ratio.SetStats(ROOT.kFALSE)

                flatline.Draw("e1same")
                flatline.SetStats(ROOT.kFALSE)

                # #stack_ratio.GetYaxis().SetNdivisions(507) # Avoids crowded labels
                CMS_lumi.CMS_lumi(c1ratio, iPeriod, iPos)
                c1ratio.Draw()
                c1ratio.Update()

                c1ratio.SaveAs(outputFolder + here + "/c1_ratio_" + compound +
                               ".png")
                c1ratio.SaveAs(outputFolder + here + "/c1_ratio_" + compound +
                               ".pdf")
                #c1ratio.SaveAs(outputFolder+here+"/c1_ratio"+compound+".root")

                #####################################
                ##
                ## log scale plot canvas
                ##
                #####################################

                c1log = ROOT.TCanvas("c1log_" + compound, "c1log_" + compound,
                                     800, 800)
                c1log.cd().SetLogy()

                #print "min1:",obj1.GetMinimum()," min2:",obj2.GetMinimum()
                for h1 in obj_array:
                    #print "min:",the_extrema[1],"max:",the_extrema[0]
                    dr = the_extrema[1] - the_extrema[0]

                    #log(max+ov) = 5/4*log(max)  ---> max+ov = 10^{5/4*log(max)}

                    if ((h1.GetMinimum() > 0.)):
                        h1.GetYaxis().SetRangeUser(
                            the_extrema[0],
                            the_extrema[1] + ROOT.TMath.Power(10, dr))
                        #h1.GetYaxis().UnZoom()
                    else:
                        h1.GetYaxis().SetRangeUser(
                            0.01,
                            ROOT.TMath.Power(
                                10,
                                1.3 * ROOT.TMath.Log10(10 * the_extrema[1])))
                        #h1.GetYaxis().SetRangeUser(0.01,the_extrema[1]+ROOT.TMath.Power(10,dr))
                        #h1.GetYaxis().UnZoom()

                    if ("prof_" not in obj1.GetName()):
                        if thetypes[obj_array.index(h1)]:
                            if obj_array.index(h1) == 0:
                                h1.Draw("PE1")
                            else:
                                h1.Draw("PE1sames")
                        else:
                            if obj_array.index(h1) == 0:
                                h1.Draw("HIST")
                            else:
                                h1.Draw("HISTsames")
                    else:
                        if obj_array.index(h1) == 0:
                            h1.Draw("PE1")
                        else:
                            h1.Draw("PE1sames")

                    #stats = h1.FindObject("stats")
                    #makeNiceStats(stats,obj_array.index(h1))
                    #stats.Draw("same")

                CMS_lumi.CMS_lumi(c1log, iPeriod, iPos)
                c1log.Draw()
                myleg.Draw("same")
                #p1.Draw("same")
                #p2.Draw("same")
                #p3.Draw("same")

                c1log.SaveAs(outputFolder + here + "/c1_log_" + compound +
                             ".png")
                c1log.SaveAs(outputFolder + here + "/c1_log_" + compound +
                             ".pdf")
                #c1log.SaveAs(outputFolder+here+"/c1log_"+compound+".root")

            elif (obj1.IsA().InheritsFrom("TDirectory")):
                print "here: ", ROOT.gDirectory.GetName()
                loopIntoIt(files, obj1, outputFolder)

    elif (key.IsA().InheritsFrom("TH1")):
        print key.GetName(), " is an histogram"
        increment_count()
        #print "processed ",nplots," histograms"
        #if (nplots>100):
        #    return

        #print obj1.GetName()," is an histogram in ",key.GetPath()
        searchpath = key.GetPath().split(":/", 1)[1]

        files[0].cd(searchpath)
        k2 = ROOT.gDirectory.GetListOfKeys().FindObject(obj1.GetName())
        obj2 = k2.ReadObj()

        arr = []
        arr.append(obj1)
        arr.append(obj2)

        the_extrema = getExtrema(arr)
        makeNicePlotStyle(obj1, ROOT.kBlue, 20, the_extrema)
        makeNicePlotStyle(obj2, ROOT.kRed, 20, the_extrema)

        compound = str(obj1.GetName()) + "_" + str(key.GetName())
        c1 = ROOT.TCanvas("c1_" + compound, "c1_" + compound, 800, 600)
        c1.cd()
        if ("prof_" not in obj1.GetName()):
            obj1.Draw("HIST")
        else:
            obj1.Draw("CP")
            obj2.Draw("CPsames")

        c1.Draw()
        ## syntax obj1,obj2,label1,label2
        myleg = makeNiceTLegend(obj1, obj2, obj3, "53X", "70X_PESS", "70X_OPT")
        myleg.Draw("same")

        #st1 = obj1.FindObject("stats")
        #st2 = obj2.FindObject("stats")
        #makeNiceStats(st1,ROOT.kBlue,st2,ROOT.kRed,st3,ROOT.kBlack)
        #st1.Draw("same")
        #st2.Draw("same")

        c1.SaveAs(outputFolder + here + "/c1_" + compound + ".pdf")
Ejemplo n.º 7
0
for i in range(0, 10):
    gForward.Fit(g2, "EX0FRU")

gForward.Draw("PEsame")

# sF = TSpline3("SPLINE_massResolution_1v3eta2v5",gForward,"",fitmin,fitmax)
# sF.SetLineColor(kBlue)
# s2.Draw("same")
# gForward.Draw("PEsame")
massReso_central = gCentral.GetFunction("massResolution_0eta1v3")
massReso_forward = gForward.GetFunction("massResolution_1v3eta2v5")

filename = "weights/puppiSoftdropResol"
f = TFile("%s.root" % filename, "UPDATE")
print "Writing to file ", f.GetName()
massReso_central.Write("", TObject.kOverwrite)
massReso_forward.Write("", TObject.kOverwrite)
# sC.Write("",TObject.kOverwrite)
# sF.Write("",TObject.kOverwrite)
canv.Write("", TObject.kOverwrite)
f.Close()

l.Draw("same")
CMS_lumi.CMS_lumi(canv, iPeriod, iPos)
canv.RedrawAxis()
canv.Update()
canvname = "puppiSoftdropResol_fit.pdf"
canv.SaveAs(canvname, "pdf")
canv.SaveAs(canvname.replace("pdf", "root"), "pdf")
time.sleep(205)
Ejemplo n.º 8
0
def eta_plot(X0W, Y0W, X1W, Y1W, X2W, Y2W, X3W, Y3W, X4W, Y4W, X5W, Y5W, X6W,
             Y6W, X7W, Y7W, X8W, Y8W, X9W, Y9W, X10W, Y10W, X11W, Y11W, X12W,
             Y12W, X13W, Y13W, X0E, Y0E, X1E, Y1E, X2E, Y2E, X3E, Y3E, X4E,
             Y4E, X5E, Y5E, X6E, Y6E, X7E, Y7E, X8E, Y8E, X9E, Y9E, X10E, Y10E,
             X11E, Y11E, X12E, Y12E, X13E, Y13E):
    print "------ Setting Up Format ----------"
    tdrstyle.setTDRStyle()
    #change the CMS_lumi variables (see CMS_lumi.py)
    CMS_lumi.writeExtraText = 1
    CMS_lumi.extraText = "Preliminary"
    CMS_lumi.extraText2 = "2018 pp data"
    CMS_lumi.lumi_sqrtS = "13 TeV"  # used with iPeriod = 0, e.g. for simulation-only plots (default is an empty string)
    CMS_lumi.writeTitle = 1
    CMS_lumi.textTitle = 'title'

    iPos = 11
    if (iPos == 0): CMS_lumi.relPosX = 0.12

    H_ref = 600
    W_ref = 800
    W = W_ref
    H = H_ref
    iPeriod = 0
    # references for T, B, L, R
    T = 0.08 * H_ref
    B = 0.12 * H_ref
    L = 0.12 * W_ref
    R = 0.04 * W_ref

    print "------ Creating Wheel TGraph ----------"
    n0W = len(X0W)
    gr0W = TGraph(n0W, X0W, Y0W)
    gr0W.SetMarkerColor(kRed)
    gr0W.SetMarkerStyle(20)
    gr0W.SetMarkerSize(1.5)
    gr0W.SetTitle('RB1 in')
    gr0W.GetXaxis().SetTitle('#eta')
    gr0W.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n1W = len(X1W)
    gr1W = TGraph(n1W, X1W, Y1W)
    gr1W.SetLineColor(2)
    gr1W.SetLineWidth(4)
    gr1W.SetMarkerColor(kBlue)
    gr1W.SetMarkerStyle(29)
    gr1W.SetMarkerSize(1.7)
    gr1W.SetTitle('Layer 1 Wheel')
    gr1W.GetXaxis().SetTitle('#eta')
    gr1W.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n2W = len(X2W)
    gr2W = TGraph(n2W, X2W, Y2W)
    gr2W.SetLineColor(3)
    gr2W.SetLineWidth(5)
    gr2W.SetMarkerColor(kRed + 2)
    gr2W.SetMarkerStyle(21)
    gr2W.SetMarkerSize(1.5)
    gr2W.SetTitle('Layer 2 Wheel')
    gr2W.GetXaxis().SetTitle('#eta')
    gr2W.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n3W = len(X3W)
    gr3W = TGraph(n3W, X3W, Y3W)
    gr3W.SetLineColor(4)
    gr3W.SetLineWidth(6)
    gr3W.SetMarkerColor(kRed)
    gr3W.SetMarkerStyle(21)
    gr3W.SetMarkerSize(1.5)
    gr3W.SetTitle('Layer 3 Wheel')
    gr3W.GetXaxis().SetTitle('#eta')
    gr3W.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n4W = len(X4W)
    gr4W = TGraph(n4W, X4W, Y4W)
    gr4W.SetLineColor(5)
    gr4W.SetLineWidth(7)
    gr4W.SetMarkerColor(kBlue)
    gr4W.SetMarkerStyle(23)
    gr4W.SetMarkerSize(1.5)
    gr4W.SetTitle('Layer 4 Wheel')
    gr4W.GetXaxis().SetTitle('#eta')
    gr4W.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    print "------ Creating Endcap TGraph ----------"
    n0E = len(X0E)
    gr0E = TGraph(n0E, X0E, Y0E)
    gr0E.SetLineColor(2)
    gr0E.SetLineWidth(4)
    gr0E.SetMarkerColor(kRed)
    gr0E.SetMarkerStyle(24)
    gr0E.SetMarkerSize(1.5)
    gr0E.SetTitle('Layer 1 Endcap')
    gr0E.GetXaxis().SetTitle('#eta')
    gr0E.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n1E = len(X1E)
    gr1E = TGraph(n1E, X1E, Y1E)
    gr1E.SetLineColor(2)
    gr1E.SetLineWidth(4)
    gr1E.SetMarkerColor(kBlue)
    gr1E.SetMarkerStyle(30)
    gr1E.SetMarkerSize(1.5)
    gr1E.SetTitle('Layer 1 Endcap')
    gr1E.GetXaxis().SetTitle('#eta')
    gr1E.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n2E = len(X2E)
    gr2E = TGraph(n2E, X2E, Y2E)
    gr2E.SetLineColor(3)
    gr2E.SetLineWidth(5)
    gr2E.SetMarkerColor(kRed + 2)
    gr2E.SetMarkerStyle(25)
    gr2E.SetMarkerSize(1.5)
    gr2E.SetTitle('Layer 2 Endcap')
    gr2E.GetXaxis().SetTitle('#eta')
    gr2E.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n3E = len(X3E)
    gr3E = TGraph(n3E, X3E, Y3E)
    gr3E.SetLineColor(4)
    gr3E.SetLineWidth(6)
    gr3E.SetMarkerColor(kRed)
    gr3E.SetMarkerStyle(25)
    gr3E.SetMarkerSize(1.5)
    gr3E.SetTitle('Layer 3 Endcap')
    gr3E.GetXaxis().SetTitle('#eta')
    gr3E.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n4E = len(X4E)
    gr4E = TGraph(n4E, X4E, Y4E)
    gr4E.SetLineColor(5)
    gr4E.SetLineWidth(7)
    gr4E.SetMarkerColor(kBlue)
    gr4E.SetMarkerStyle(32)
    gr4E.SetMarkerSize(1.5)
    gr4E.SetTitle('Layer 4 Endcap')
    gr4E.GetXaxis().SetTitle('#eta')
    gr4E.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    print "------ Creating Wheel TGraph ----------"
    n5W = len(X5W)
    gr5W = TGraph(n5W, X5W, Y5W)
    gr5W.SetLineColor(2)
    gr5W.SetLineWidth(4)
    gr5W.SetMarkerColor(6)
    gr5W.SetMarkerStyle(22)
    gr5W.SetMarkerSize(1.5)
    gr5W.SetTitle('Layer 1 Wheel')
    gr5W.GetXaxis().SetTitle('#eta')
    gr5W.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n6W = len(X6W)
    gr6W = TGraph(n6W, X6W, Y6W)
    gr6W.SetLineColor(3)
    gr6W.SetLineWidth(5)
    gr6W.SetMarkerColor(28)
    gr6W.SetMarkerStyle(23)
    gr6W.SetMarkerSize(1.7)
    gr6W.SetTitle('Layer 2 Wheel')
    gr6W.GetXaxis().SetTitle('#eta')
    gr6W.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n7W = len(X7W)
    gr7W = TGraph(n7W, X7W, Y7W)
    gr7W.SetLineColor(4)
    gr7W.SetLineWidth(6)
    gr7W.SetMarkerColor(kRed)
    gr7W.SetMarkerStyle(20)
    gr7W.SetMarkerSize(1.5)
    gr7W.SetTitle('Layer 3 Wheel')
    gr7W.GetXaxis().SetTitle('#eta')
    gr7W.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n8W = len(X8W)
    gr8W = TGraph(n8W, X8W, Y8W)
    gr8W.SetLineColor(5)
    gr8W.SetLineWidth(7)
    gr8W.SetMarkerColor(kBlue)
    gr8W.SetMarkerStyle(29)
    gr8W.SetMarkerSize(1.5)
    gr8W.SetTitle('Layer 4 Wheel')
    gr8W.GetXaxis().SetTitle('#eta')
    gr8W.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n9W = len(X9W)
    gr9W = TGraph(n9W, X9W, Y9W)
    gr9W.SetLineColor(5)
    gr9W.SetLineWidth(7)
    gr9W.SetMarkerColor(kRed + 2)
    gr9W.SetMarkerStyle(21)
    gr9W.SetMarkerSize(1.5)
    gr9W.SetTitle('Layer 4 Wheel')
    gr9W.GetXaxis().SetTitle('#eta')
    gr9W.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n10W = len(X10W)
    gr10W = TGraph(n10W, X10W, Y10W)
    gr10W.SetLineColor(5)
    gr10W.SetLineWidth(7)
    gr10W.SetMarkerColor(kRed)
    gr10W.SetMarkerStyle(21)
    gr10W.SetMarkerSize(1.5)
    gr10W.SetTitle('Layer 4 Wheel')
    gr10W.GetXaxis().SetTitle('#eta')
    gr10W.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n11W = len(X11W)
    gr11W = TGraph(n11W, X11W, Y11W)
    gr11W.SetLineColor(5)
    gr11W.SetLineWidth(7)
    gr11W.SetMarkerColor(kBlue)
    gr11W.SetMarkerStyle(23)
    gr11W.SetMarkerSize(1.5)
    gr11W.SetTitle('Layer 4 Wheel')
    gr11W.GetXaxis().SetTitle('#eta')
    gr11W.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n12W = len(X12W)
    gr12W = TGraph(n12W, X12W, Y12W)
    gr12W.SetLineColor(5)
    gr12W.SetLineWidth(7)
    gr12W.SetMarkerColor(6)
    gr12W.SetMarkerStyle(22)
    gr12W.SetMarkerSize(1.5)
    gr12W.SetTitle('Layer 4 Wheel')
    gr12W.GetXaxis().SetTitle('#eta')
    gr12W.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n13W = len(X13W)
    gr13W = TGraph(n13W, X13W, Y13W)
    gr13W.SetLineColor(5)
    gr13W.SetLineWidth(7)
    gr13W.SetMarkerColor(28)
    gr13W.SetMarkerStyle(23)
    gr13W.SetMarkerSize(1.5)
    gr13W.SetTitle('Layer 4 Wheel')
    gr13W.GetXaxis().SetTitle('#eta')
    gr13W.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    print "------ Creating Endcap TGraph ----------"
    n5E = len(X5E)
    gr5E = TGraph(n5E, X5E, Y5E)
    gr5E.SetLineColor(2)
    gr5E.SetLineWidth(4)
    gr5E.SetMarkerColor(6)
    gr5E.SetMarkerStyle(26)
    gr5E.SetMarkerSize(1.5)
    gr5E.SetTitle('Layer 1 Endcap')
    gr5E.GetXaxis().SetTitle('#eta')
    gr5E.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n6E = len(X6E)
    gr6E = TGraph(n6E, X6E, Y6E)
    gr6E.SetLineColor(3)
    gr6E.SetLineWidth(5)
    gr6E.SetMarkerColor(28)
    gr6E.SetMarkerStyle(32)
    gr6E.SetMarkerSize(1.5)
    gr6E.SetTitle('Layer 2 Endcap')
    gr6E.GetXaxis().SetTitle('#eta')
    gr6E.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n7E = len(X7E)
    gr7E = TGraph(n7E, X7E, Y7E)
    gr7E.SetLineColor(4)
    gr7E.SetLineWidth(6)
    gr7E.SetMarkerColor(kRed)
    gr7E.SetMarkerStyle(24)
    gr7E.SetMarkerSize(1.5)
    gr7E.SetTitle('Layer 3 Endcap')
    gr7E.GetXaxis().SetTitle('#eta')
    gr7E.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n8E = len(X8E)
    gr8E = TGraph(n8E, X8E, Y8E)
    gr8E.SetLineColor(5)
    gr8E.SetLineWidth(7)
    gr8E.SetMarkerColor(kBlue)
    gr8E.SetMarkerStyle(30)
    gr8E.SetMarkerSize(1.5)
    gr8E.SetTitle('Layer 4 Endcap')
    gr8E.GetXaxis().SetTitle('#eta')
    gr8E.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n9E = len(X9E)
    gr9E = TGraph(n9E, X9E, Y9E)
    gr9E.SetLineColor(5)
    gr9E.SetLineWidth(7)
    gr9E.SetMarkerColor(kRed + 2)
    gr9E.SetMarkerStyle(25)
    gr9E.SetMarkerSize(1.5)
    gr9E.SetTitle('Layer 4 Endcap')
    gr9E.GetXaxis().SetTitle('#eta')
    gr9E.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n10E = len(X10E)
    gr10E = TGraph(n10E, X10E, Y10E)
    gr10E.SetLineColor(5)
    gr10E.SetLineWidth(7)
    gr10E.SetMarkerColor(kRed)
    gr10E.SetMarkerStyle(25)
    gr10E.SetMarkerSize(1.5)
    gr10E.SetTitle('Layer 4 Endcap')
    gr10E.GetXaxis().SetTitle('#eta')
    gr10E.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n11E = len(X11E)
    gr11E = TGraph(n11E, X11E, Y11E)
    gr11E.SetLineColor(5)
    gr11E.SetLineWidth(7)
    gr11E.SetMarkerColor(kBlue)
    gr11E.SetMarkerStyle(32)
    gr11E.SetMarkerSize(1.5)
    gr11E.SetTitle('Layer 4 Endcap')
    gr11E.GetXaxis().SetTitle('#eta')
    gr11E.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n12E = len(X12E)
    gr12E = TGraph(n12E, X12E, Y12E)
    gr12E.SetLineColor(5)
    gr12E.SetLineWidth(7)
    gr12E.SetMarkerColor(6)
    gr12E.SetMarkerStyle(26)
    gr12E.SetMarkerSize(1.5)
    gr12E.SetTitle('Layer 4 Endcap')
    gr12E.GetXaxis().SetTitle('#eta')
    gr12E.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    n13E = len(X13E)
    gr13E = TGraph(n13E, X13E, Y13E)
    gr13E.SetLineColor(5)
    gr13E.SetLineWidth(7)
    gr13E.SetMarkerColor(28)
    gr13E.SetMarkerStyle(32)
    gr13E.SetMarkerSize(1.5)
    gr13E.SetTitle('Layer 4 Endcap')
    gr13E.GetXaxis().SetTitle('#eta')
    gr13E.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')

    print "----- Creating TCanvas -----"
    H = 800
    W = 1600
    canv = TCanvas("c1", "Canvas", 50, 50, W, H)
    canv.SetFillColor(0)
    canv.SetBorderMode(0)
    canv.SetFrameFillStyle(0)
    canv.SetFrameBorderMode(0)
    canv.SetLeftMargin(L / W)
    canv.SetRightMargin(R / W)
    canv.SetTopMargin(T / H)
    canv.SetBottomMargin(B / H)
    canv.SetTickx(0)
    canv.SetTicky(0)
    canv.Divide(3, 2, 0.001, 0.001)
    CMS_lumi.CMS_lumi(canv, iPeriod, iPos)
    canv.cd()
    canv.Update()
    maxY = 1000

    canv.cd(1)
    gPad.SetLogy()
    print " ------------ Creating TMultiGraph -----------"
    mg1 = TMultiGraph()
    #graphAxis(mg1)
    mg1.Add(gr0E, "AP")
    mg1.Add(gr0W, "AP")
    mg1.Add(gr7E, "AP")
    mg1.Add(gr7W, "AP")
    mg1.Draw("a")
    mg1.SetTitle('RB1in')
    mg1.GetXaxis().SetTitle('#eta')
    mg1.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')
    mg1.SetMaximum(maxY)
    mg1.GetXaxis().SetLabelFont(42)
    mg1.GetXaxis().SetLabelOffset(0.007)
    mg1.GetXaxis().SetLabelSize(0.043)
    mg1.GetXaxis().SetTitleSize(0.05)
    mg1.GetXaxis().SetTitleOffset(1.06)
    mg1.GetXaxis().SetTitleFont(42)
    mg1.GetYaxis().SetLabelFont(42)
    mg1.GetYaxis().SetLabelOffset(0.008)
    mg1.GetYaxis().SetLabelSize(0.05)
    mg1.GetYaxis().SetTitleSize(0.06)
    mg1.GetYaxis().SetTitleOffset(0.87)
    mg1.GetYaxis().SetTitleFont(42)

    pvtxt = TPaveText(.1, 0.97, .55, 0.97, "NDC")  #(.06,.4,.55,.73)
    pvtxt.AddText('CMS Preliminary')
    pvtxt.SetFillStyle(0)
    pvtxt.SetBorderSize(0)
    pvtxt.SetTextSize(0.03)
    pvtxt.Draw()
    pvtxt100 = TPaveText(.7, 0.97, .9, 0.97, "NDC")
    pvtxt100.AddText('5.0 #times 10^{34} Hz/cm^{2} (13 TeV)')
    pvtxt100.SetFillStyle(0)
    pvtxt100.SetBorderSize(0)
    pvtxt100.SetTextSize(0.03)
    pvtxt100.Draw()

    canv.cd(2)
    gPad.SetLogy()
    gr00 = TGraph()
    gr00.SetMarkerColor(kBlack)
    gr00.SetMarkerStyle(20)
    gr00.SetMarkerSize(1.5)
    gr01 = TGraph()
    gr01.SetMarkerColor(kBlack)
    gr01.SetMarkerStyle(24)
    gr01.SetMarkerSize(1.5)

    legend0 = TLegend(0.2, 0.7, .8, .9)
    legend0.SetNColumns(1)
    legend0.AddEntry(gr00, "Barrel", "p")
    legend0.AddEntry(gr01, "Endcaps", "p")
    legend0.Draw("a same")

    legendi = TLegend(0.2, 0.2, .8, .6)
    legendi.SetNColumns(1)
    legendi.AddEntry(gr7W, "RB1in  + RE1", "p")
    legendi.AddEntry(gr8W, "RB1out + RE1", "p")
    legendi.AddEntry(gr9W, "RB2 + RE2", "p")
    #  legendi.AddEntry(gr10W, "RB2in  + RE2" , "p")
    #  legendi.AddEntry(gr11W, "RB2out + RE2" , "p")
    legendi.AddEntry(gr12W, "RB3 + RE3", "p")
    legendi.AddEntry(gr13W, "RB4 + RE4", "p")
    legendi.SetTextSize(0.05)
    legendi.Draw("a")

    canv.cd(3)
    gPad.SetLogy()
    mg2 = TMultiGraph()
    mg2.Add(gr1E, "AP")
    mg2.Add(gr1W, "AP")
    mg2.Add(gr8E, "AP")
    mg2.Add(gr8W, "AP")
    mg2.Draw("a")
    mg2.SetTitle('RB1out')
    mg2.GetXaxis().SetTitle('#eta')
    mg2.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')
    mg2.SetMaximum(maxY)
    mg2.GetXaxis().SetLabelFont(42)
    mg2.GetXaxis().SetLabelOffset(0.007)
    mg2.GetXaxis().SetLabelSize(0.043)
    mg2.GetXaxis().SetTitleSize(0.05)
    mg2.GetXaxis().SetTitleOffset(1.06)
    mg2.GetXaxis().SetTitleFont(42)
    mg2.GetYaxis().SetLabelFont(42)
    mg2.GetYaxis().SetLabelOffset(0.008)
    mg2.GetYaxis().SetLabelSize(0.05)
    mg2.GetYaxis().SetTitleSize(0.06)
    mg2.GetYaxis().SetTitleOffset(0.87)
    mg2.GetYaxis().SetTitleFont(42)

    pvtxt3 = TPaveText(.1, 0.97, .55, 0.97, "NDC")  #(.06,.4,.55,.73)
    pvtxt3.AddText('CMS Preliminary')
    pvtxt3.SetFillStyle(0)
    pvtxt3.SetBorderSize(0)
    pvtxt3.SetTextSize(0.03)
    pvtxt3.Draw()
    pvtxt4 = TPaveText(.7, 0.97, .9, 0.97, "NDC")
    pvtxt4.AddText('5.0 #times 10^{34} Hz/cm^{2} (13 TeV)')
    pvtxt4.SetFillStyle(0)
    pvtxt4.SetBorderSize(0)
    pvtxt4.SetTextSize(0.03)
    pvtxt4.Draw()

    canv.cd(4)
    gPad.SetLogy()
    mg3 = TMultiGraph()
    #graphAxis(mg3)
    mg3.Add(gr2E, "AP")
    mg3.Add(gr2W, "AP")
    mg3.Add(gr9E, "AP")
    mg3.Add(gr9W, "AP")
    mg3.Draw("a")
    mg3.SetTitle('RB2')
    mg3.GetXaxis().SetTitle('#eta')
    mg3.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')
    mg3.SetMaximum(maxY)
    mg3.GetXaxis().SetLabelFont(42)
    mg3.GetXaxis().SetLabelOffset(0.007)
    mg3.GetXaxis().SetLabelSize(0.043)
    mg3.GetXaxis().SetTitleSize(0.05)
    mg3.GetXaxis().SetTitleOffset(1.06)
    mg3.GetXaxis().SetTitleFont(42)
    mg3.GetYaxis().SetLabelFont(42)
    mg3.GetYaxis().SetLabelOffset(0.008)
    mg3.GetYaxis().SetLabelSize(0.05)
    mg3.GetYaxis().SetTitleSize(0.06)
    mg3.GetYaxis().SetTitleOffset(0.87)
    mg3.GetYaxis().SetTitleFont(42)

    pvtxt5 = TPaveText(.1, 0.97, .55, 0.97, "NDC")  #(.06,.4,.55,.73)
    pvtxt5.AddText('CMS Preliminary')
    pvtxt5.SetFillStyle(0)
    pvtxt5.SetBorderSize(0)
    pvtxt5.SetTextSize(0.03)
    pvtxt5.Draw()
    pvtxt6 = TPaveText(.7, 0.97, .9, 0.97, "NDC")
    pvtxt6.AddText('5.0 #times 10^{34} Hz/cm^{2} (13 TeV)')
    pvtxt6.SetFillStyle(0)
    pvtxt6.SetBorderSize(0)
    pvtxt6.SetTextSize(0.03)
    pvtxt6.Draw()

    canv.cd(5)
    gPad.SetLogy()
    mg4 = TMultiGraph()
    #graphAxis(mg4)
    mg4.Add(gr5E, "AP")
    mg4.Add(gr5W, "AP")
    mg4.Add(gr12E, "AP")
    mg4.Add(gr12W, "AP")
    mg4.Draw("a")
    mg4.SetTitle('RB3')
    mg4.GetXaxis().SetTitle('#eta')
    mg4.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')
    mg4.SetMaximum(maxY)
    mg4.GetXaxis().SetLabelFont(42)
    mg4.GetXaxis().SetLabelOffset(0.007)
    mg4.GetXaxis().SetLabelSize(0.043)
    mg4.GetXaxis().SetTitleSize(0.05)
    mg4.GetXaxis().SetTitleOffset(1.06)
    mg4.GetXaxis().SetTitleFont(42)
    mg4.GetYaxis().SetLabelFont(42)
    mg4.GetYaxis().SetLabelOffset(0.008)
    mg4.GetYaxis().SetLabelSize(0.05)
    mg4.GetYaxis().SetTitleSize(0.06)
    mg4.GetYaxis().SetTitleOffset(0.87)
    mg4.GetYaxis().SetTitleFont(42)

    pvtxt7 = TPaveText(.1, 0.97, .55, 0.97, "NDC")  #(.06,.4,.55,.73)
    pvtxt7.AddText('CMS Preliminary')
    pvtxt7.SetFillStyle(0)
    pvtxt7.SetBorderSize(0)
    pvtxt7.SetTextSize(0.03)
    pvtxt7.Draw()
    pvtxt8 = TPaveText(.7, 0.97, .9, 0.97, "NDC")
    pvtxt8.AddText('5.0 #times 10^{34} Hz/cm^{2} (13 TeV)')
    pvtxt8.SetFillStyle(0)
    pvtxt8.SetBorderSize(0)
    pvtxt8.SetTextSize(0.03)
    pvtxt8.Draw()

    canv.cd(6)
    gPad.SetLogy()
    mg5 = TMultiGraph()
    #graphAxis(mg5)
    mg5.Add(gr6E, "AP")
    mg5.Add(gr6W, "AP")
    mg5.Add(gr13E, "AP")
    mg5.Add(gr13W, "AP")
    mg5.Draw("a")
    mg5.SetTitle('RB4')
    mg5.GetXaxis().SetTitle('#eta')
    mg5.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')
    mg5.SetMaximum(maxY)
    mg5.GetXaxis().SetLabelFont(42)
    mg5.GetXaxis().SetLabelOffset(0.007)
    mg5.GetXaxis().SetLabelSize(0.043)
    mg5.GetXaxis().SetTitleSize(0.05)
    mg5.GetXaxis().SetTitleOffset(1.06)
    mg5.GetXaxis().SetTitleFont(42)
    mg5.GetYaxis().SetLabelFont(42)
    mg5.GetYaxis().SetLabelOffset(0.008)
    mg5.GetYaxis().SetLabelSize(0.05)
    mg5.GetYaxis().SetTitleSize(0.06)
    mg5.GetYaxis().SetTitleOffset(0.87)
    mg5.GetYaxis().SetTitleFont(42)

    pvtxt10 = TPaveText(.1, 0.97, .55, 0.97, "NDC")  #(.06,.4,.55,.73)
    pvtxt10.AddText('CMS Preliminary')
    pvtxt10.SetFillStyle(0)
    pvtxt10.SetBorderSize(0)
    pvtxt10.SetTextSize(0.03)
    pvtxt10.Draw()
    pvtxt9 = TPaveText(.7, 0.97, .9, 0.97, "NDC")
    pvtxt9.AddText('5.0 #times 10^{34} Hz/cm^{2} (13 TeV)')
    pvtxt9.SetFillStyle(0)
    pvtxt9.SetBorderSize(0)
    pvtxt9.SetTextSize(0.03)
    pvtxt9.Draw()

    canv.SaveAs("etaDistro.gif")
    canv.SaveAs("etaDistro.png")
    canv.SaveAs("etaDistro.pdf")
    canv.SaveAs("etaDistro.C")

    canv.Close()

    print "----- Creating Second TCanvas -----"
    H = 800
    W = 800
    c = TCanvas("c1", "Canvas", 50, 50, W, H)
    c.SetFillColor(0)
    c.SetBorderMode(0)
    c.SetFrameFillStyle(0)
    c.SetFrameBorderMode(0)
    c.SetLeftMargin(L / W)
    c.SetRightMargin(R / W)
    c.SetTopMargin(T / H)
    c.SetBottomMargin(B / H)
    c.SetTickx(0)
    c.SetTicky(0)
    gPad.SetLogy()

    print " ------------ Creating TMultiGraph -----------"
    mg = TMultiGraph()
    mg.Add(gr0E, "AP")
    mg.Add(gr0W, "AP")
    mg.Add(gr7E, "AP")
    mg.Add(gr7W, "AP")
    mg.Add(gr1W, "AP")
    mg.Add(gr8W, "AP")
    mg.Draw("a")
    mg.SetTitle('RB1in')
    mg.GetXaxis().SetTitle('#eta')
    mg.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')
    mg.SetMaximum(maxY)
    mg.GetXaxis().SetLabelFont(42)
    mg.GetXaxis().SetLabelOffset(0.007)
    mg.GetXaxis().SetLabelSize(0.043)
    mg.GetXaxis().SetTitleSize(0.05)
    mg.GetXaxis().SetTitleOffset(1.06)
    mg.GetXaxis().SetTitleFont(42)
    mg.GetYaxis().SetLabelFont(42)
    mg.GetYaxis().SetLabelOffset(0.008)
    mg.GetYaxis().SetLabelSize(0.05)
    mg.GetYaxis().SetTitleSize(0.06)
    mg.GetYaxis().SetTitleOffset(0.87)
    mg.GetYaxis().SetTitleFont(42)

    pvt = TPaveText(.1, 0.97, .55, 0.97, "NDC")  #(.06,.4,.55,.73)
    pvt.AddText('CMS Preliminary')
    pvt.SetFillStyle(0)
    pvt.SetBorderSize(0)
    pvt.SetTextSize(0.03)
    pvt.Draw()
    pvt1 = TPaveText(.7, 0.97, .9, 0.97, "NDC")
    pvt1.AddText('5.0 #times 10^{34} Hz/cm^{2} (13 TeV)')
    pvt1.SetFillStyle(0)
    pvt1.SetBorderSize(0)
    pvt1.SetTextSize(0.03)
    pvt1.Draw()

    legenda = TLegend(0.4, 0.7, .7, .9)
    legenda.SetNColumns(1)
    legenda.AddEntry(gr0E, "RE1", "p")
    legenda.AddEntry(gr0W, "RB1in", "p")
    legenda.AddEntry(gr1W, "RB1out", "p")
    legenda.SetTextSize(0.05)
    legenda.Draw("a")

    c.SaveAs("etaDistroDetailRB1.png")
    c.SaveAs("etaDistroDetailRB1.gif")
    c.SaveAs("etaDistroDetailRB1.pdf")
    c.SaveAs("etaDistroDetailRB1.C")

    c.Close()

    print "----- Creating Second TCanvas -----"
    c1 = TCanvas("c1", "Canvas", 50, 50, W, H)
    c1.SetFillColor(0)
    c1.SetBorderMode(0)
    c1.SetFrameFillStyle(0)
    c1.SetFrameBorderMode(0)
    c1.SetLeftMargin(L / W)
    c1.SetRightMargin(R / W)
    c1.SetTopMargin(T / H)
    c1.SetBottomMargin(B / H)
    c1.SetTickx(0)
    c1.SetTicky(0)
    gPad.SetLogy()

    print " ------------ Creating TMultiGraph -----------"
    mgd2 = TMultiGraph()
    mgd2.Add(gr3E, "AP")
    mgd2.Add(gr3W, "AP")
    mgd2.Add(gr10E, "AP")
    mgd2.Add(gr10W, "AP")
    mgd2.Add(gr4W, "AP")
    mgd2.Add(gr11W, "AP")
    mgd2.Draw("a")
    mgd2.SetTitle('RB1in')
    mgd2.GetXaxis().SetTitle('#eta')
    mgd2.GetYaxis().SetTitle('RPC single hit rate (Hz/cm^{2})')
    mgd2.SetMaximum(maxY)
    mgd2.GetXaxis().SetLabelFont(42)
    mgd2.GetXaxis().SetLabelOffset(0.007)
    mgd2.GetXaxis().SetLabelSize(0.043)
    mgd2.GetXaxis().SetTitleSize(0.05)
    mgd2.GetXaxis().SetTitleOffset(1.06)
    mgd2.GetXaxis().SetTitleFont(42)
    mgd2.GetYaxis().SetLabelFont(42)
    mgd2.GetYaxis().SetLabelOffset(0.008)
    mgd2.GetYaxis().SetLabelSize(0.05)
    mgd2.GetYaxis().SetTitleSize(0.06)
    mgd2.GetYaxis().SetTitleOffset(0.87)
    mgd2.GetYaxis().SetTitleFont(42)

    pv = TPaveText(.1, 0.97, .55, 0.97, "NDC")  #(.06,.4,.55,.73)
    pv.AddText('CMS Preliminary')
    pv.SetFillStyle(0)
    pv.SetBorderSize(0)
    pv.SetTextSize(0.03)
    pv.Draw()
    pv1 = TPaveText(.7, 0.97, .9, 0.97, "NDC")
    pv1.AddText('5.0 #times 10^{34} Hz/cm^{2} (13 TeV)')
    pv1.SetFillStyle(0)
    pv1.SetBorderSize(0)
    pv1.SetTextSize(0.03)
    pv1.Draw()

    legendd2 = TLegend(0.4, 0.6, .7, .8)
    legendd2.SetNColumns(1)
    legendd2.AddEntry(gr3E, "RE2", "p")
    legendd2.AddEntry(gr3W, "RB2in", "p")
    legendd2.AddEntry(gr4W, "RB2out", "p")
    legendd2.SetTextSize(0.05)
    legendd2.Draw("a")

    c1.SaveAs("etaDistroDetailRB2.png")
    c1.SaveAs("etaDistroDetailRB2.pdf")
    c1.SaveAs("etaDistroDetailRB2.gif")
    c1.SaveAs("etaDistroDetailRB2.C")

    c1.Close()

    print "is there an error here?"
Ejemplo n.º 9
0
def plotUpperLimits(model, lambdas, helicity, Mmin):

    N = len(lambdas)
    yellow = TGraph(2 * N)  # yellow band
    green = TGraph(2 * N)  # green band
    median = TGraph(N)  # median line

    up2s = []
    xseclist = [1.0] * N

    for i in range(N):
        file_name = "./%sshapeCards/ee_limit_min%d%s/higgsCombineTest.AsymptoticLimits.mH%d.root" % (
            model, Mmin, helicity, lambdas[i])
        limit = getLimits(file_name)
        up2s.append(limit[4])
        if model == "ADD":
            yellow.SetPoint(i, lambdas[i] / 1000,
                            limit[4] * xseclist[i])  # + 2 sigma
            green.SetPoint(i, lambdas[i] / 1000,
                           limit[3] * xseclist[i])  # + 1 sigma
            median.SetPoint(i, lambdas[i] / 1000,
                            limit[2] * xseclist[i])  # median
            green.SetPoint(2 * N - 1 - i, lambdas[i] / 1000,
                           limit[1] * xseclist[i])  # - 1 sigma
            yellow.SetPoint(2 * N - 1 - i, lambdas[i] / 1000,
                            limit[0] * xseclist[i])  # - 2 sigma
        else:
            yellow.SetPoint(i, lambdas[i], limit[4] * xseclist[i])  # + 2 sigma
            green.SetPoint(i, lambdas[i], limit[3] * xseclist[i])  # + 1 sigma
            median.SetPoint(i, lambdas[i], limit[2] * xseclist[i])  # median
            green.SetPoint(2 * N - 1 - i, lambdas[i],
                           limit[1] * xseclist[i])  # - 1 sigma
            yellow.SetPoint(2 * N - 1 - i, lambdas[i],
                            limit[0] * xseclist[i])  # - 2 sigma
        print "Lambda = %d, Median = %f" % (lambdas[i], limit[2])

    W = 800
    H = 600
    T = 0.08 * H
    B = 0.12 * H
    L = 0.12 * W
    R = 0.04 * W
    c = TCanvas("c", "c", 100, 100, W, H)
    c.SetFillColor(0)
    c.SetBorderMode(0)
    c.SetFrameFillStyle(0)
    c.SetFrameBorderMode(0)
    c.SetLeftMargin(L / W)
    c.SetRightMargin(R / W)
    c.SetTopMargin(T / H)
    c.SetBottomMargin(B / H)
    c.SetTickx(0)
    c.SetTicky(0)
    c.SetGrid()
    c.cd()
    if model == "ADD": frame = c.DrawFrame(4, 0.01, 10, 10)
    else: frame = c.DrawFrame(16, 0.1, 40, 8)
    frame.GetYaxis().CenterTitle()
    frame.GetYaxis().SetTitleSize(0.05)
    frame.GetXaxis().SetTitleSize(0.05)
    frame.GetXaxis().SetLabelSize(0.04)
    frame.GetYaxis().SetLabelSize(0.04)
    frame.GetYaxis().SetTitleOffset(0.9)
    frame.GetXaxis().SetNdivisions(508)
    frame.GetYaxis().CenterTitle(True)
    #frame.GetYaxis().SetTitle("95% upper limit on #sigma / #sigma_{}")
    if model == "ADD":
        frame.GetYaxis().SetTitle("95% CL limit on #sigma / #sigma_{ADD}")
        frame.GetXaxis().SetTitle("#Lambda_{T} [ADD]")
    else:
        frame.GetYaxis().SetTitle("95% CL limit on #sigma / #sigma_{CI}")
        frame.GetXaxis().SetTitle("#Lambda [CI]")
    frame.SetMinimum(0)
    #frame.SetMaximum(max(up2s)*1.05)
    #frame.GetXaxis().SetLimits(min(values),max(values))

    yellow.SetFillColor(ROOT.kOrange)
    yellow.SetLineColor(ROOT.kOrange)
    yellow.SetFillStyle(1001)
    yellow.Draw('F')

    green.SetFillColor(ROOT.kGreen + 1)
    green.SetLineColor(ROOT.kGreen + 1)
    green.SetFillStyle(1001)
    green.Draw('Fsame')

    median.SetLineColor(1)
    median.SetLineWidth(2)
    median.SetLineStyle(2)
    median.Draw('Lsame')

    CMS_lumi.CMS_lumi(c, 13, 11)
    ROOT.gPad.SetTicks(1, 1)
    frame.Draw('sameaxis')

    x1 = 0.15
    x2 = x1 + 0.24
    y2 = 0.76
    y1 = 0.60
    legend = TLegend(x1, y1, x2, y2)
    legend.SetFillStyle(0)
    legend.SetBorderSize(0)
    legend.SetTextSize(0.041)
    legend.SetTextFont(42)
    legend.AddEntry(median,
                    "Asymptotic CL_{s} expected %s%s" % (model, helicity), 'L')
    legend.AddEntry(green, "#pm 1 std. deviation", 'f')
    legend.AddEntry(yellow, "#pm 2 std. deviation", 'f')
    legend.Draw()

    c.SaveAs("%slimits/%sLimit_ee_ShapeMin%d%s_201678.png" %
             (model, model, Mmin, helicity))
    c.Close()
    def saveCanvas(self, corner, suffix='', leg=True):
        if self.doRatio: self.canvas.cd(1)
        else: self.canvas.cd()

        # Draw legend
        textSize = 0.022
        legWidth = 0.13
        height = (.18 + textSize * max(len(self.objectsInLeg) - 3, 0))
        if corner == "TR":
            (x1, y1, x2,
             y2) = (0.93 - legWidth if self.doWide else .85 - legWidth,
                    .93 - height, .865, .93)
        elif corner == "TC":
            (x1, y1, x2, y2) = (.5, .93 - height, .55 + legWidth, .93)
        elif corner == "TL":
            (x1, y1, x2, y2) = (.18, .835 - height, .18 + legWidth, .835)
        elif corner == "BR":
            (x1, y1, x2, y2) = (.85 - legWidth, .16 + height, .90, .16)
        elif corner == "BC":
            (x1, y1, x2, y2) = (.5, .16 + height, .5 + legWidth, .16)
        elif corner == "BL":
            (x1, y1, x2, y2) = (.2, .16 + height, .2 + legWidth, .16)

        if leg:
            leg = r.TLegend(x1, y1, x2, y2)
            leg.SetTextFont(42)
            leg.SetTextSize(textSize)
            leg.SetBorderSize(0)
            leg.SetFillColor(10)
            for obj, name, opt, idnam in self.objectsInLeg:
                if opt:
                    leg.AddEntry(obj, name, opt)
            leg.Draw('same')

        if not hasattr(self, 'noCMS'):
            CMS_lumi.lumi_13TeV = "%.1f fb^{-1}" % (vl.Lumi)
            CMS_lumi.extraText = 'Preliminary'
            CMS_lumi.lumi_sqrtS = '#sqrt{s} = 13 TeV'
            CMS_lumi.CMS_lumi(
                r.gPad, 4, 10, -0.005 if self.doWide and self.doRatio else
                0.01 if self.doWide else 0.05)

        # Draw ratio if needed
        if self.doRatio:
            print '> Plotting ratio between prediction(s) and results'
            if 'data' not in [it[3] for it in self.objectsInLeg]:
                raise RuntimeError(
                    'There is not data to make a ratio plot as demanded.')
            if [it[3] for it in self.objectsInLeg].count('data') > 1:
                raise RuntimeError(
                    'There are more than one data histograms attached: multiple ratios are not implemented.'
                )
            if 'mc' not in [it[3] for it in self.objectsInLeg]:
                raise RuntimeError(
                    'There is not (at least) one prediction to make a ratio plot as demanded.'
                )
            if 'unc' not in [it[3] for it in self.objectsInLeg]:
                raise RuntimeError(
                    'There is not histogram with the total uncertainties to make a ratio plot as demanded.'
                )
            if [it[3] for it in self.objectsInLeg].count('unc') > 1:
                raise RuntimeError(
                    'There are more than one total uncertainty histograms attached. Please add only one.'
                )
            # Obtaining resources
            ratiohistos = []
            totalunc = None

            datavalues = copy.deepcopy(
                [it[0] for it in self.objectsInLeg if it[3] == 'data'][0])
            fitunc = copy.deepcopy(datavalues.Clone('fitunc'))

            for bin in range(1, datavalues.GetNbinsX() + 1):
                datavalues.SetBinError(bin, 0.)
            for it in self.objectsInLeg:
                if it[3] == 'mc':
                    ratiohistos.append(copy.deepcopy(it[0].Clone(it[1])))
                    ratiohistos[-1].Divide(datavalues)
                if it[3] == 'unc':
                    totalunc = copy.deepcopy(it[0].Clone(it[1]))
            xtemp = r.Double(0.)
            ytemp = r.Double(0.)
            for bin in range(1, datavalues.GetNbinsX() + 1):
                fitunc.SetBinError(
                    bin,
                    fitunc.GetBinError(bin) / fitunc.GetBinContent(bin))
                fitunc.SetBinContent(bin, 1.)
                totalunc.GetPoint(bin - 1, xtemp, ytemp)
                totalunc.SetPointEYhigh(
                    bin - 1,
                    totalunc.GetErrorYhigh(bin - 1) / ytemp)
                totalunc.SetPointEYlow(bin - 1,
                                       totalunc.GetErrorYlow(bin - 1) / ytemp)
                totalunc.SetPoint(bin - 1, xtemp, 1.)

            # Setting options
            fitunc.SetFillColorAlpha(r.kAzure, 0.35)
            fitunc.SetLineColor(r.kBlack)
            fitunc.SetFillStyle(1001)
            fitunc.SetLineWidth(1)
            fitunc.SetMarkerSize(0.)

            totalunc.SetLineColor(r.kBlack)
            totalunc.SetFillStyle(1001)
            totalunc.SetLineWidth(1)

            #if self.doFit: totalunc.GetXaxis().SetRangeUser(fitunc.GetXaxis().GetBinLowEdge(1), fitunc.GetXaxis().GetBinUpEdge(fitunc.GetNbinsX()))
            totalunc.GetXaxis().SetRangeUser(
                fitunc.GetXaxis().GetBinLowEdge(1),
                fitunc.GetXaxis().GetBinUpEdge(fitunc.GetNbinsX()))
            #else:          totalunc.GetXaxis().SetRangeUser(datavalues.GetXaxis().GetBinLowEdge(1), datavalues.GetXaxis().GetBinUpEdge(datavalues.GetNbinsX()))

            totalunc.GetXaxis().SetTitle(vl.varList[self.name.replace(
                '_folded', '').replace('_asimov', '')]['xaxis'])
            totalunc.GetXaxis().SetTitleFont(43)
            totalunc.GetXaxis().SetTitleSize(22)
            totalunc.GetXaxis().SetTitleOffset(4)
            totalunc.GetXaxis().SetLabelFont(43)
            totalunc.GetXaxis().SetLabelSize(22)
            totalunc.GetXaxis().SetLabelOffset(0.007)
            totalunc.GetXaxis().SetNdivisions(510, True)

            totalunc.GetYaxis().SetRangeUser(0, 2.5)
            totalunc.GetYaxis().SetTitle('Pred./Data')
            totalunc.GetYaxis().SetTitleFont(43)
            totalunc.GetYaxis().SetTitleSize(22)
            totalunc.GetYaxis().SetTitleOffset(0.5 if self.doWide else 1.8)
            totalunc.GetYaxis().CenterTitle(True)
            totalunc.GetYaxis().SetLabelFont(43)
            totalunc.GetYaxis().SetLabelSize(22)
            totalunc.GetYaxis().SetLabelOffset(0.007)
            totalunc.GetYaxis().SetNdivisions(510, True)

            # Drawing
            self.canvas.cd(2)
            totalunc.Draw('a2')
            fitunc.Draw('E2,L,same')
            for el in ratiohistos:
                el.Draw('L,same')

        # Save results
        self.canvas.SaveAs(self.plotspath + self.name + suffix + '.pdf')
        self.canvas.SaveAs(self.plotspath + self.name + suffix + '.png')
        self.canvas.SaveAs(self.plotspath + self.name + suffix + '.eps')
        self.canvas.SaveAs(self.plotspath + self.name + suffix + '.root')

        self.canvas.IsA().Destructor(self.canvas)
Ejemplo n.º 11
0
    def DrawText(self):
        #redraw axes
        self.c.RedrawAxis()
        # white background
        graphWhite = rt.TGraph(5)
        graphWhite.SetName("white")
        graphWhite.SetTitle("white")
        graphWhite.SetFillColor(rt.kWhite)
        graphWhite.SetFillStyle(1001)
        graphWhite.SetLineColor(rt.kBlack)
        graphWhite.SetLineStyle(1)
        graphWhite.SetLineWidth(3)
        graphWhite.SetPoint(0, self.model.Xmin, self.model.Ymax)
        graphWhite.SetPoint(1, self.model.Xmax, self.model.Ymax)

        # if(self.model.label2 == ""):
        #     graphWhite.SetPoint(2,self.model.Xmax, self.model.Ymax*0.75)
        #     graphWhite.SetPoint(3,self.model.Xmin, self.model.Ymax*0.75)
        # else:
        #     graphWhite.SetPoint(2,self.model.Xmax, self.model.Ymax*0.69)
        #     graphWhite.SetPoint(3,self.model.Xmin, self.model.Ymax*0.69)
        graphWhite.SetPoint(2, self.model.Xmax, self.model.Ymax * 0.75)
        graphWhite.SetPoint(3, self.model.Xmin, self.model.Ymax * 0.75)

        graphWhite.SetPoint(4, self.model.Xmin, self.model.Ymax)
        graphWhite.Draw("FSAME")
        graphWhite.Draw("LSAME")
        self.c.graphWhite = graphWhite
        CMS_lumi.writeExtraText = 0
        CMS_lumi.extraText = self.preliminary
        CMS_lumi.lumi_13TeV = self.lumi + " fb^{-1}"

        CMS_lumi.lumi_sqrtS = self.energy + " TeV"
        iPos = 0
        CMS_lumi.CMS_lumi(self.c, 4, iPos)
        # CMS LABEL
        textCMS = rt.TLatex(0.25, 0.96, "  %s " % (self.preliminary))
        textCMS.SetNDC()
        textCMS.SetTextAlign(13)
        textCMS.SetTextFont(52)
        textCMS.SetTextSize(0.038)
        textCMS.Draw()
        self.c.textCMS = textCMS
        exclusion_text = "Approx. NNLO+NNLL exclusion"
        if "rpvMonoPhi" in self.model.modelname:
            exclusion_text = "    LO exclusion"
        # MODEL LABEL
        if (self.model.label2 == ""):
            textModelLabel = rt.TLatex(
                0.15, 0.90, "%s  %s" % (self.model.label, exclusion_text))
            textModelLabel.SetNDC()
            textModelLabel.SetTextAlign(13)
            textModelLabel.SetTextFont(42)
            textModelLabel.SetTextSize(0.030 if "rpvMonoPhi" not in
                                       self.model.modelname else 0.037)
            textModelLabel.Draw()
            self.c.textModelLabel = textModelLabel
        else:
            textModelLabel = rt.TLatex(0.15, 0.910, "%s" % self.model.label)
            textModelLabel.SetNDC()
            textModelLabel.SetTextAlign(13)
            textModelLabel.SetTextFont(42)
            textModelLabel.SetTextSize(0.032)
            textModelLabel.Draw()
            self.c.textModelLabel = textModelLabel
            textModelLabel2 = rt.TLatex(0.15, 0.860, exclusion_text)
            textModelLabel2.SetNDC()
            textModelLabel2.SetTextAlign(13)
            textModelLabel2.SetTextFont(42)
            textModelLabel2.SetTextSize(0.032)
            textModelLabel2.Draw()
            self.c.textModelLabel2 = textModelLabel2
            self.c.otherLabels = []
            for i, text in enumerate(self.model.label2.split(r"\\")):
                tl = rt.TLatex(0.58, 0.855 - i * 0.044, text)
                tl.SetNDC()
                tl.SetTextAlign(13)
                tl.SetTextFont(42)
                tl.SetTextSize(0.027)
                tl.Draw()
                self.c.otherLabels.append(tl)

            self.c.SaveAs("~/public_html/test.pdf")

        # NLO NLL XSEC
        textNLONLL = rt.TLatex(0.16, 0.32, "NLO-NLL exclusion")
        textNLONLL.SetNDC()
        textNLONLL.SetTextAlign(13)
        textNLONLL.SetTextFont(42)
        textNLONLL.SetTextSize(0.04)
        textNLONLL.Draw()
Ejemplo n.º 12
0
def plotHists(binname='incl', inclTemplate=False, mcData=True, addHists=True):

    # frame
    frame = _varStore['Lp'].frame(
        RooFit.Title('Lp distributions and fit in bin ' + binname))

    _dhStore['data_' + binname].plotOn(
        frame, RooFit.Name('data'),
        RooFit.DataError(RooAbsData.SumW2))  #,RooLinkedList())

    # plot full template fit
    _pdfStore['pdfTemplate'].plotOn(frame, RooFit.LineColor(2),
                                    RooFit.Name('FullFit'))
    # plot only QCD component
    if not inclTemplate:
        argset = RooArgSet(_pdfStore['pdfQCDanti_' +
                                     binname])  # hack to keep arguments alive
    else:
        import re
        incName = re.sub('LT[0-9]', 'LTi',
                         binname)  # use LTi as inclusive template
        if 'pdfQCDanti_' + incName not in _pdfStore:
            incName = re.sub('LT[0-9]_', '',
                             binname)  # remove LTx to get incl template
        argset = RooArgSet(_pdfStore['pdfQCDanti_' +
                                     incName])  # hack to keep arguments alive
    _pdfStore['pdfTemplate'].plotOn(frame, RooFit.Components(argset),
                                    RooFit.LineColor(kCyan),
                                    RooFit.LineStyle(5), RooFit.Name('QCDfit'))
    # plot only EWK
    argset2 = RooArgSet(_pdfStore['pdfEWKsel_' +
                                  binname])  # hack to keep arguments alive
    _pdfStore['pdfTemplate'].plotOn(frame, RooFit.Components(argset2),
                                    RooFit.LineColor(4), RooFit.LineStyle(2),
                                    RooFit.Name('EWKfit'))

    # PLOT
    canv = TCanvas("cQCDfit_" + binname, "canvas for bin " + binname, cwidth,
                   cheigth)

    if cheigth == cwidth:
        frame.GetYaxis().SetTitleOffset(1.3)

    frame.Draw()

    if addHists:

        doTransp = True

        if doTransp:
            alpha = 0.35
            _hStore['EWKsel_' + binname].SetFillColorAlpha(
                _hStore['EWKsel_' + binname].GetFillColor(), alpha)
            _hStore['QCDsel_' + binname].SetFillColorAlpha(
                _hStore['QCDsel_' + binname].GetFillColor(), alpha)
        else:
            _hStore['EWKsel_' + binname].SetFillStyle(3001)
            _hStore['QCDsel_' + binname].SetFillStyle(3002)

        stack = THStack('hs', 'hstack')
        stack.Add(_hStore['QCDsel_' + binname])
        stack.Add(_hStore['EWKsel_' + binname])
        stack.Draw("histsame")
        #_hStore['QCDsel_'+binname].Draw("histsame")

        SetOwnership(stack, 0)
        #SetOwnership( _hStore['QCDsel_'+binname], 0 )
        #SetOwnership( _hStore['EWKsel_'+binname], 0 )
        #hData.Draw('histsame')

    frame.Draw("same")

    # LEGEND
    leg = doLegend()

    # set legend header = bin name
    #leg.SetHeader("Bin: " + binname.replace("_",", "))
    leg.SetHeader("Bin: " + decryptBinName(binname))

    if mcData:
        leg.AddEntry(frame.findObject('data'), 'Pseudo Data', 'lp')
    else:
        leg.AddEntry(frame.findObject('data'), 'Data', 'lp')

    leg.AddEntry(frame.findObject('FullFit'), 'Full fit', 'l')
    leg.AddEntry(frame.findObject('QCDfit'), 'QCD fit (Data)', 'l')
    leg.AddEntry(frame.findObject('EWKfit'), 'EWK fit (MC)', 'l')

    if addHists:
        leg.AddEntry(0, "From MC:", "")
        leg.AddEntry(_hStore['EWKsel_' + binname], 'EWK selected', 'f')
        leg.AddEntry(_hStore['QCDsel_' + binname], 'QCD selected', 'f')

    leg.Draw()

    SetOwnership(leg, 0)

    #for prim in  canv.GetListOfPrimitives(): print prim

    # Draw CMS Lumi
    CMS_lumi.CMS_lumi(canv, 4, iPos)

    gPad.Update()

    if '-b' not in sys.argv:
        # wait for input
        answ = ['c']
        while 'c' not in answ:
            answ.append(raw_input("Enter 'c' to continue: "))

    _canvStore[canv.GetName()] = canv

    return canv
canvas = ROOT.TCanvas("col", "col", 50, 50, W, H)
canvas.SetFillColor(0)
canvas.SetBorderMode(0)
canvas.SetFrameFillStyle(0)
canvas.SetFrameBorderMode(0)
canvas.SetLeftMargin(L / W)
canvas.SetRightMargin(R / W)
canvas.SetTopMargin(T / H)
canvas.SetBottomMargin(B / H)
canvas.SetTickx(0)
canvas.SetTicky(0)
#canvas.SetGrid()

matrixByCol.Draw("colz text")

CMS_lumi.CMS_lumi(canvas, 4, iPos)

ROOT.gPad.RedrawAxis()
canvas.SaveAs("confusionmatrix_bycol_2018_1p2.png")

canvas2 = ROOT.TCanvas("row", "row", 50, 50, W, H)
canvas2.SetFillColor(0)
canvas2.SetBorderMode(0)
canvas2.SetFrameFillStyle(0)
canvas2.SetFrameBorderMode(0)
canvas2.SetLeftMargin(L / W)
canvas2.SetRightMargin(R / W)
canvas2.SetTopMargin(T / H)
canvas2.SetBottomMargin(B / H)
canvas2.SetTickx(0)
canvas2.SetTicky(0)
Ejemplo n.º 14
0
  h.GetYaxis().SetTitle('Efficiency')
  h.SetName(fname.GetName())
  histolist.append(h)  
  j += 1

canvas.cd()
for j in range(1,len(histolist)+1):  
  hs.Add( histolist[len(histolist)-j],"HIST")

histolist[0].Draw()  
histolist[0].SetMaximum(histolist[0].GetMaximum()*1.2)
for j in range(0,len(histolist)):  
  histolist[j].Draw("same")  
  legend.Draw()
canvas.Update()
CMS_lumi.CMS_lumi(canvas, 4, 0)
canvas.cd()
canvas.Update()
canvas.RedrawAxis()
canvas.cd()
canvas.Update()
#
# l1 = TLatex()
# l1.SetTextAlign(13)
# l1.SetTextFont(42)
# l1.SetNDC()
# l1.SetTextSize(0.04)
# l1.DrawLatex(0.14+0.03,0.25, 'Run 2015D')
#
# l1.SetTextAlign(12)
# l1.SetTextSize(0.045)
Ejemplo n.º 15
0
def easyPlot(name,
             tag,
             histlist,
             bkglist=[],
             signals=[],
             colors=[],
             titles=[],
             logy=False,
             rootfile=False,
             xtitle='',
             ytitle='',
             dataOff=False,
             datastyle='pe'):
    # histlist is just the generic list but if bkglist is specified (non-empty)
    # then this function will stack the backgrounds and compare against histlist as if
    # it is data. The important bit is that bkglist is a list of lists. The first index
    # of bkglist corresponds to the index in histlist (the corresponding data).
    # For example you could have:
    #   histlist = [data1, data2]
    #   bkglist = [[bkg1_1,bkg2_1],[bkg1_2,bkg2_2]]

    if len(histlist) == 1:
        width = 800
        height = 700
        padx = 1
        pady = 1
    elif len(histlist) == 2:
        width = 1200
        height = 700
        padx = 2
        pady = 1
    elif len(histlist) == 3:
        width = 1600
        height = 700
        padx = 3
        pady = 1
    elif len(histlist) == 4:
        width = 1200
        height = 1000
        padx = 2
        pady = 2
    elif len(histlist) == 6 or len(histlist) == 5:
        width = 1600
        height = 1000
        padx = 3
        pady = 2
    else:
        raise ValueError('histlist of size ' + str(len(histlist)) +
                         ' not currently supported')

    tdrstyle.setTDRStyle()

    myCan = TCanvas(name, name, width, height)
    myCan.Divide(padx, pady)

    # Just some colors that I think work well together and a bunch of empty lists for storage if needed
    default_colors = [kRed, kMagenta, kGreen, kCyan, kBlue]
    if len(colors) == 0:
        colors = default_colors
    stacks = []
    tot_hists = []
    legends = []
    mains = []
    subs = []
    pulls = []
    logString = ''

    # For each hist/data distribution
    for hist_index, hist in enumerate(histlist):
        # Grab the pad we want to draw in
        myCan.cd(hist_index + 1)
        # if len(histlist) > 1:
        thisPad = myCan.GetPrimitive(name + '_' + str(hist_index + 1))
        thisPad.cd()

        # If this is a TH2, just draw the lego
        if hist.ClassName().find('TH2') != -1:
            if logy == True:
                gPad.SetLogy()
            gPad.SetLeftMargin(0.2)
            hist.GetXaxis().SetTitle(xtitle)
            hist.GetYaxis().SetTitle(ytitle)
            hist.GetXaxis().SetTitleOffset(1.5)
            hist.GetYaxis().SetTitleOffset(2.3)
            hist.GetZaxis().SetTitleOffset(1.8)
            if len(titles) > 0:
                hist.SetTitle(titles[hist_index])

            hist.Draw('lego')
            if len(bkglist) > 0:
                print(
                    'ERROR: It seems you are trying to plot backgrounds with data on a 2D plot. This is not supported since there is no good way to view this type of distribution.'
                )

        # Otherwise it's a TH1 hopefully
        else:
            alpha = 1
            if dataOff:
                alpha = 0
            hist.SetLineColorAlpha(kBlack, alpha)
            if 'pe' in datastyle.lower():
                hist.SetMarkerColorAlpha(kBlack, alpha)
                hist.SetMarkerStyle(8)
            if 'hist' in datastyle.lower():
                hist.SetFillColorAlpha(0, 0)

            # If there are no backgrounds, only plot the data (semilog if desired)
            if len(bkglist) == 0:
                hist.GetXaxis().SetTitle(xtitle)
                hist.GetYaxis().SetTitle(ytitle)
                if len(titles) > 0:
                    hist.SetTitle(titles[hist_index])
                hist.Draw(datastyle)

            # Otherwise...
            else:
                # Create some subpads, a legend, a stack, and a total bkg hist that we'll use for the error bars
                if not dataOff:
                    mains.append(
                        TPad(hist.GetName() + '_main',
                             hist.GetName() + '_main', 0, 0.3, 1, 1))
                    subs.append(
                        TPad(hist.GetName() + '_sub',
                             hist.GetName() + '_sub', 0, 0, 1, 0.3))

                else:
                    mains.append(
                        TPad(hist.GetName() + '_main',
                             hist.GetName() + '_main', 0, 0.1, 1, 1))
                    subs.append(
                        TPad(hist.GetName() + '_sub',
                             hist.GetName() + '_sub', 0, 0, 0, 0))

                legends.append(TLegend(0.65, 0.6, 0.95, 0.93))
                stacks.append(
                    THStack(hist.GetName() + '_stack',
                            hist.GetName() + '_stack'))
                tot_hist = hist.Clone(hist.GetName() + '_tot')
                tot_hist.Reset()
                tot_hist.SetTitle(hist.GetName() + '_tot')
                tot_hist.SetMarkerStyle(0)
                tot_hists.append(tot_hist)

                # Set margins and make these two pads primitives of the division, thisPad
                mains[hist_index].SetBottomMargin(0.0)
                mains[hist_index].SetLeftMargin(0.16)
                mains[hist_index].SetRightMargin(0.05)
                mains[hist_index].SetTopMargin(0.1)

                subs[hist_index].SetLeftMargin(0.16)
                subs[hist_index].SetRightMargin(0.05)
                subs[hist_index].SetTopMargin(0)
                subs[hist_index].SetBottomMargin(0.3)
                mains[hist_index].Draw()
                subs[hist_index].Draw()

                # Build the stack
                for bkg_index, bkg in enumerate(
                        bkglist[hist_index]):  # Won't loop if bkglist is empty
                    # bkg.Sumw2()
                    tot_hists[hist_index].Add(bkg)
                    bkg.SetLineColor(kBlack)
                    if logy:
                        bkg.SetMinimum(1e-3)

                    if bkg.GetName().find('qcd') != -1:
                        bkg.SetFillColor(kYellow)

                    else:
                        if colors[bkg_index] != None:
                            bkg.SetFillColor(colors[bkg_index])
                        else:
                            bkg.SetFillColor(default_colors[bkg_index])

                    stacks[hist_index].Add(bkg)

                    legends[hist_index].AddEntry(bkg,
                                                 bkg.GetName().split('_')[0],
                                                 'f')

                # Go to main pad, set logy if needed
                mains[hist_index].cd()

                # Set y max of all hists to be the same to accomodate the tallest
                histList = [stacks[hist_index], tot_hists[hist_index], hist]

                yMax = histList[0].GetMaximum()
                maxHist = histList[0]
                for h in range(1, len(histList)):
                    if histList[h].GetMaximum() > yMax:
                        yMax = histList[h].GetMaximum()
                        maxHist = histList[h]
                for h in histList:
                    h.SetMaximum(yMax * 1.1)
                    if logy == True:
                        h.SetMaximum(yMax * 10)

                mLS = 0.06
                # Now draw the main pad
                data_leg_title = hist.GetTitle()
                if len(titles) > 0:
                    hist.SetTitle(titles[hist_index])
                hist.SetTitleOffset(1.5, "xy")
                hist.GetYaxis().SetTitle('Events')
                hist.GetYaxis().SetLabelSize(mLS)
                hist.GetYaxis().SetTitleSize(mLS)
                if logy == True:
                    hist.SetMinimum(1e-3)
                hist.Draw(datastyle)

                stacks[hist_index].Draw('same hist')

                # Do the signals
                if len(signals) > 0:
                    signals[hist_index].SetLineColor(kBlue)
                    signals[hist_index].SetLineWidth(2)
                    if logy == True:
                        signals[hist_index].SetMinimum(1e-3)
                    legends[hist_index].AddEntry(
                        signals[hist_index],
                        signals[hist_index].GetName().split('_')[0], 'L')
                    signals[hist_index].Draw('hist same')

                tot_hists[hist_index].SetFillColor(kBlack)
                tot_hists[hist_index].SetFillStyle(3354)

                tot_hists[hist_index].Draw('e2 same')
                # legends[hist_index].Draw()

                if not dataOff:
                    legends[hist_index].AddEntry(hist, 'data', datastyle)
                    hist.Draw(datastyle + ' same')

                gPad.RedrawAxis()

                # Draw the pull
                subs[hist_index].cd()
                # Build the pull
                pulls.append(Make_Pull_plot(hist, tot_hists[hist_index]))
                pulls[hist_index].SetFillColor(kBlue)
                pulls[hist_index].SetTitle(";" + hist.GetXaxis().GetTitle() +
                                           ";(Data-Bkg)/#sigma")
                pulls[hist_index].SetStats(0)

                LS = .13

                pulls[hist_index].GetYaxis().SetRangeUser(-2.9, 2.9)
                pulls[hist_index].GetYaxis().SetTitleOffset(0.4)
                pulls[hist_index].GetXaxis().SetTitleOffset(0.9)

                pulls[hist_index].GetYaxis().SetLabelSize(LS)
                pulls[hist_index].GetYaxis().SetTitleSize(LS)
                pulls[hist_index].GetYaxis().SetNdivisions(306)
                pulls[hist_index].GetXaxis().SetLabelSize(LS)
                pulls[hist_index].GetXaxis().SetTitleSize(LS)

                pulls[hist_index].GetXaxis().SetTitle(xtitle)
                pulls[hist_index].GetYaxis().SetTitle("(Data-Bkg)/#sigma")
                pulls[hist_index].Draw('hist')

                if logy == True:
                    mains[hist_index].SetLogy()

                CMS_lumi.CMS_lumi(thisPad, 4, 11)

    if rootfile:
        myCan.Print(tag + 'plots/' + name + '.root', 'root')
    else:
        myCan.Print(tag + 'plots/' + name + '.png', 'png')
Ejemplo n.º 16
0
        leg.AddEntry(background, "B Fit", "L")
        #leg.AddEntry(background_f6,"B Fit","L")
        #leg.AddEntry(background_f6_SplusB,"B component","L")
        leg.AddEntry(h_s_plus_b, "S+B Fit", "L")

        pave_fit.Draw("same")
        #pave_fit1.Draw("same")
        leg.Draw("same")

        #redraw axis
        p11_1.RedrawAxis()
        p11_1.Update()
        #cout << "MIN: " << p11_1.GetUxmin() << endl
        #cout << "MAX: " << p11_1.GetUxmax() << endl
        #draw the lumi text on the canvas
        CMS_lumi.CMS_lumi(p11_1, iPeriod, iPos)

        #
        #---- Next PAD

        c.cd(2)
        p11_2 = c.GetPad(2)
        p11_2.SetPad(0.01, 0.02, 0.99, 0.27)
        p11_2.SetBottomMargin(0.35)
        p11_2.SetRightMargin(0.05)
        p11_2.SetGridx()
        p11_2.SetGridy()

        vFrame2 = p11_2.DrawFrame(p11_1.GetUxmin(), -3.5, p11_1.GetUxmax(),
                                  3.5)
def plot_mJ(canvas,xlo,xhi,reg,w,fitres,normset,ch,pads,medianLines,paveTexts,legends):


    canvas.cd()
    pad     = TPad(reg,reg,xlo,0.25,xhi,1.0)
    if reg=='sb_lo':
        pad2    = TPad(reg+"_pull",reg+"_pull",xlo,0.0,xhi,0.31)
        pad.SetMargin(0.25,0,0.1,0.1)
        pad2.SetMargin(0.25,0.0,0.4,0)
    elif reg=='sb_hi':
        pad2    = TPad(reg+"_pull",reg+"_pull",xlo,0.0,xhi,0.31)
        pad.SetMargin(0,0.1,0.1,0.1)
        pad2.SetMargin(0,0.1,0.4,0)
    else:
        pad2    = TPad(reg+"_pull",reg+"_pull",xlo-0.00445,0.0,xhi+0.001,0.31)
        pad.SetMargin(0,0,0.1,0.1)
        pad2.SetMargin(0.022,0,0.4,0)
    pad.Draw()
    pad2.Draw()

    pad.cd()
    # Main MJ plot
    p       = plot(w,fitres,normset,ch,reg)
    #p.GetXaxis().SetTitleSize(0.0575)
    #p.GetXaxis().SetTitleOffset(0.7)
    p.GetXaxis().SetTitleSize(0)
    p.GetXaxis().SetLabelSize(0)
    p.GetYaxis().SetRangeUser(0,1450)
    p.GetYaxis().SetLabelSize(0.05)
    p.GetYaxis().SetTitle('Events / 5 GeV')
    p.GetYaxis().SetTitleSize(0.08)
    p.GetYaxis().SetTitleOffset(1.1)
    if reg=='sb_lo':
        p.GetYaxis().SetRangeUser(0,1535)
        p.GetXaxis().SetTitle('')
    elif reg=='sb_hi':
        p.GetYaxis().SetTitle('')
        p.GetYaxis().SetLabelSize(0)
    else:
        p.GetXaxis().SetTitle('')
        p.GetYaxis().SetTitle('')
        p.GetYaxis().SetLabelSize(0)
    p.Draw()

    # Lumi text and channel
    if reg=='sb_lo':
       CMS_lumi.lumiTextSize=0.0
       #CMS_lumi.writeExtraText=True
       CMS_lumi.cmsTextSize=0.75
       CMS_lumi.relPosY    = -0.09
       CMS_lumi.relExtraDX = 0.3
       CMS_lumi.relExtraDY = 0.24
       CMS_lumi.CMS_lumi(pad,4,11)
    elif reg=='sb_hi':
       CMS_lumi.cmsTextSize=0.0
       #CMS_lumi.writeExtraText=False
       CMS_lumi.lumiTextSize=0.65
       CMS_lumi.lumiTextOffset=0.2
       CMS_lumi.CMS_lumi(pad,4,11)

    # Channel text
    if reg=='sig':
        pt = TPaveText(0.375,0.8,0.625,0.97, "blNDC")
        pt.SetFillStyle(0)
        pt.SetBorderSize(0)
        pt.SetTextAlign(23)
        pt.SetTextSize(0.09)
        if ch=="el":
            pt.AddText("Electron channel")
        else:
            pt.AddText("Muon channel")
        pt.Draw()
        paveTexts.append(pt)

    # Legend
    if reg=='sb_hi':
        legMJ=TLegend(0.625,0.39,0.875,0.875)
        legMJ.SetFillColor(0)
        legMJ.SetFillStyle(0)
        legMJ.SetBorderSize(0)
        legMJ.SetLineColor(0)
        legMJ.SetLineWidth(0)
        legMJ.SetLineStyle(0)
        legMJ.SetTextFont(42)
        if ch=='el':
            #legMJ.AddEntry(p.getObject(11),"CMS data, WV#rightarrow e#nuqq","P")
            legMJ.AddEntry(p.getObject(11),"Data","PE")
        else:
            #legMJ.AddEntry(p.getObject(11),"CMS data, WV#rightarrow #mu#nuqq","P")
            legMJ.AddEntry(p.getObject(11),"Data","PE")
        #legMJ.AddEntry(p.getObject(10),"Signal","L")
        legMJ.AddEntry(p.getObject(0),"W+jets","F")
        legMJ.AddEntry(p.getObject(1),"t#bar{t}","F")
        legMJ.AddEntry(p.getObject(4),"WW","F")
        legMJ.AddEntry(p.getObject(5),"WZ","F")
        legMJ.AddEntry(p.getObject(8),"Single top","F")
        legMJ.AddEntry(p.getObject(10),"Post-fit unc.","F")
        legMJ.Draw()
    else:
        legMJ=[]

    pad2.cd()

    # MJ pull histograms
    if reg=='sb_lo':
        pullhist    = p.pullHist("data","WJets")
        pullhist.SetMaximum(4.9)
        pullhist.SetMinimum(-5)
        pullhist.GetXaxis().SetRangeUser(40,65)
        pullhist.GetXaxis().SetNdivisions(505)
        pullhist.GetXaxis().SetLabelSize(0.14)
        pullhist.GetYaxis().SetNdivisions(7)
        pullhist.GetYaxis().SetTitle('#frac{Data-Fit}{#sigma_{Data}}')
        pullhist.GetYaxis().SetLabelSize(0.125)
        pullhist.GetYaxis().SetTitleSize(0.2)
        pullhist.GetYaxis().SetTitleOffset(0.35)
        pullhist.SetMarkerStyle(20)
        #pullhist.SetMarkerSize(1.5)
        pullhist.SetLineColor(kBlack)
        pullhist.SetMarkerColor(kBlack)
        pullhist.Draw("AP")
        medianLine = TLine(pullhist.GetXaxis().GetXmin(),0.,pullhist.GetXaxis().GetXmax(),0.); medianLine.SetLineWidth(1); medianLine.SetLineColor(kBlue); medianLine.Draw();
        pullhist.Draw("Psame")

    elif reg=='sig':
        pullhist    = p.pullHist("data","WJets")
        pullhist.SetMaximum(4.9)
        pullhist.SetMinimum(-5)
        pullhist.GetXaxis().SetRangeUser(65,105)
        pullhist.GetXaxis().SetLabelSize(0.14)
        pullhist.GetYaxis().SetNdivisions(7)
        pullhist.GetYaxis().SetLabelSize(0)
        pullhist.GetYaxis().SetTitleSize(0.2)
        pullhist.GetYaxis().SetTitleOffset(0.32)
        pullhist.SetMarkerStyle(20)
        #pullhist.SetMarkerSize(1.5)
        pullhist.SetLineColor(kBlack)
        pullhist.SetMarkerColor(kBlack)
        pullhist.Draw("AP")
        medianLine = TLine(65.,0.,105.,0.); medianLine.SetLineWidth(1); medianLine.SetLineColor(kBlue); medianLine.Draw();
        pullhist.Draw("Psame")
    else:
        pullhist    = p.pullHist("data","WJets")
        pullhist.SetMaximum(4.9)
        pullhist.SetMinimum(-5)
        pullhist.GetXaxis().SetRangeUser(105,150)
        pullhist.GetXaxis().SetLabelSize(0.14)
        pullhist.GetXaxis().SetTitle('m_{SD} (GeV)')
        pullhist.GetXaxis().SetTitleSize(0.2)
        pullhist.GetXaxis().SetTitleOffset(0.85)
        pullhist.GetYaxis().SetNdivisions(7)
        pullhist.GetYaxis().SetLabelSize(0)
        pullhist.GetYaxis().SetTitleSize(0.2)
        pullhist.GetYaxis().SetTitleOffset(0.32)
        pullhist.SetMarkerStyle(20)
        #pullhist.SetMarkerSize(1.5)
        pullhist.SetLineColor(kBlack)
        pullhist.SetMarkerColor(kBlack)
        pullhist.Draw("AP")
        medianLine = TLine(105.,0.,150.,0.); medianLine.SetLineWidth(1); medianLine.SetLineColor(kBlue); medianLine.Draw();
        pullhist.Draw("Psame")

    canvas.Update()

    pads.append(pad)
    pads.append(pad2)
    medianLines.append(medianLine)
    legends.append(legMJ)
Ejemplo n.º 18
0
def drawCorrelationPlot(h2D,
                        labelXtmp="xaxis", labelYtmp="yaxis", labelZtmp="zaxis",
                        canvasName="default", plotLabel="", outdir="./",
                        rebinFactorY=0,
                        rebinFactorX=0,
                        smoothPlot=True,
                        drawProfileX=True,
                        scaleToUnitArea=True,
                        draw_both0_noLog1_onlyLog2=0,
                        leftMargin=0.16,
                        rightMargin=0.20,
                        nContours=50,
                        palette=57,
                        canvasSize="700,625"):


    # if h2D.GetName() == "scaleFactor_origBinPt":
    #     print "="*20
    #     print "Check: hist %s: Z axis title = %s" % (h2D.GetName(),labelZtmp)
    #     print "="*20

    ROOT.TH1.SetDefaultSumw2()

    if (rebinFactorX): 
        if isinstance(rebinFactorX, int): h2D.RebinY(rebinFactorX)
        else:                             h2D.RebinY(len(rebinFactorX)-1,"",array('d',rebinFactorX)) # case in which rebinFactorX is a list of bin edges

    if (rebinFactorY): 
        if isinstance(rebinFactorY, int): h2D.RebinY(rebinFactorY)
        else:                             h2D.RebinY(len(rebinFactorY)-1,"",array('d',rebinFactorY)) # case in which rebinFactorX is a list of bin edges

    ROOT.gStyle.SetPalette(palette)  # 55:raibow palette ; 57: kBird (blue to yellow, default) ; 107 kVisibleSpectrum ; 77 kDarkRainBow 
    ROOT.gStyle.SetNumberContours(nContours) # default is 20 

    labelX,setXAxisRangeFromUser,xmin,xmax = getAxisRangeFromUser(labelXtmp)
    labelY,setYAxisRangeFromUser,ymin,ymax = getAxisRangeFromUser(labelYtmp)
    labelZ,setZAxisRangeFromUser,zmin,zmax = getAxisRangeFromUser(labelZtmp)
    
    cw,ch = canvasSize.split(',')
    #canvas = ROOT.TCanvas("canvas",h2D.GetTitle() if plotLabel == "ForceTitle" else "",700,625)
    canvas = ROOT.TCanvas("canvas","",int(cw),int(ch))
    canvas.SetLeftMargin(leftMargin)
    canvas.SetRightMargin(rightMargin)
    canvas.cd()

    addStringToEnd(outdir,"/",notAddIfEndswithMatch=True)
    createPlotDirAndCopyPhp(outdir)
    # normalize to 1
    if (scaleToUnitArea): h2D.Scale(1./h2D.Integral())

    h2DGraph = 0

    h2DPlot = 0
    if (not smoothPlot): h2DPlot = h2D
    else:
        h2DGraph = ROOT.TGraph2D()
        h2DGraph.SetNpx(300)
        h2DGraph.SetNpy(300)
        nPoint = 0
        for iBinX in range (1,1+h2D.GetNbinsX()):
            for iBinY in range(1,1+h2D.GetNbinsY()):
                h2DGraph.SetPoint(nPoint,h2D.GetXaxis().GetBinCenter(iBinX),h2D.GetYaxis().GetBinCenter(iBinY),h2D.GetBinContent(iBinX,iBinY))
                nPoint += 1
            

        h2DPlot = h2DGraph.GetHistogram()
  
    h2DPlot.GetXaxis().SetTitle(labelX)
    h2DPlot.GetYaxis().SetTitle(labelY)
    h2DPlot.GetXaxis().SetTitleSize(0.05)
    h2DPlot.GetXaxis().SetLabelSize(0.04)
    h2DPlot.GetXaxis().SetTitleOffset(1.1)
    h2DPlot.GetYaxis().SetTitleSize(0.05)
    h2DPlot.GetYaxis().SetLabelSize(0.04)
    h2DPlot.GetYaxis().SetTitleOffset(1.1)
    h2DPlot.GetZaxis().SetTitleSize(0.05)
    h2DPlot.GetZaxis().SetLabelSize(0.04)
    h2DPlot.GetZaxis().SetTitleOffset(1.2)

    h2DPlot.GetZaxis().SetTitle(labelZ) 
    h2DPlot.Draw("colz")
    if (setXAxisRangeFromUser): h2DPlot.GetXaxis().SetRangeUser(xmin,xmax)
    if (setYAxisRangeFromUser): h2DPlot.GetYaxis().SetRangeUser(ymin,ymax)
    if (setZAxisRangeFromUser): h2DPlot.GetZaxis().SetRangeUser(zmin,zmax)


    # if h2D.GetName() == "scaleFactor_origBinPt":
    #     print "="*20
    #     print "Check: hist %s: Z axis title = %s" % (h2DPlot.GetName(),h2DPlot.GetZaxis().GetTitle())
    #     print "="*20

    # attempt to make Z axis title farther depending on how many digits are printed
    maxZaxisVal = h2DPlot.GetBinContent(h2DPlot.GetMaximumBin())
    if (setZAxisRangeFromUser): maxZaxisVal = zmax

    if maxZaxisVal >= 1.0:
        rootYear = int(str(ROOT.gROOT.GetVersionDate())[:4])        
        if (rootYear > 2016):
            h2DPlot.GetZaxis().SetMaxDigits(3)
        else:
            print "Warning in drawCorrelationPlot: TAxis::SetMaxDigits() not implemented for ROOT versions before 2017 (rough estimate)"
            print "Will not exit, but instruction will be neglected"
        if maxZaxisVal > 9999.:
            h2DPlot.GetZaxis().SetTitleOffset(h2DPlot.GetZaxis().GetTitleOffset()+0.15)
            print "Changing title offset by 0.15"
    else:
        i = 1
        tryNext = True
        while tryNext:
            tmpVal = maxZaxisVal * pow(10,i)
            if tmpVal >= 1.0: tryNext = False 
            else: i += 1
        if i > 1:            
            print "Max Z axis < 1, will try to adjust distance of Z axis title to Z axis"
            print "i = %d: will move Z axis offset by 0.45" % i
            # for numbers like 0.025 or with more 0 after ., make increase distance between Z axis title and the Z axis
            h2DPlot.GetZaxis().SetTitleOffset(h2DPlot.GetZaxis().GetTitleOffset()+0.45)

    h2DProfile = 0
    if drawProfileX:
        h2DProfile = h2D.ProfileX("%s_pfx" %h2D.GetName())
        h2DProfile.SetMarkerColor(ROOT.kBlack)
        h2DProfile.SetMarkerStyle(20)
        h2DProfile.SetMarkerSize(1)
        h2DProfile.Draw("EPsame")
        
    # not yet implemented
    if not plotLabel == "ForceTitle": CMS_lumi(canvas,"",True,False)
    setTDRStyle()
    #print ">>>>>>>>>>>>>> check <<<<<<<<<<<<<<<<<<<"

    if plotLabel == "ForceTitle":
        ROOT.gStyle.SetOptTitle(1)        

    #h2DPlot.GetZaxis().SetMaxDigits(1)  #for N>99, should use scientific notation, I'd like to make it work only with negative exponential but haven't succeeded yet
    # canvas.Modified()
    # canvas.Update()

    leg = ROOT.TLegend(0.39,0.75,0.89,0.95)
    leg.SetFillStyle(0)
    leg.SetFillColor(0)
    leg.SetBorderSize(0)
    leg.SetTextFont(62)
    if plotLabel not in ["", "ForceTitle"]: leg.AddEntry(0,plotLabel,"")
    if drawProfileX: leg.AddEntry(0,"Correlation = %.2f" % h2DPlot.GetCorrelationFactor(),"")
    leg.Draw("same")

    if (draw_both0_noLog1_onlyLog2 == 0 or draw_both0_noLog1_onlyLog2 == 1):
        for ext in ['png', 'pdf']:
            canvas.SaveAs('{od}/{cn}.{ext}'.format(od=outdir, cn=canvasName, ext=ext))
        
    if (draw_both0_noLog1_onlyLog2 == 0 or draw_both0_noLog1_onlyLog2 == 2):
        canvas.SetLogz()
        for ext in ['png', 'pdf']:
            canvas.SaveAs('{od}/{cn}_logZ.{ext}'.format(od=outdir, cn=canvasName, ext=ext))
        canvas.SetLogz(0)
Ejemplo n.º 19
0
def Estimate_QCD(config,
                 sysname='',
                 direction='',
                 is_weight=False,
                 processlist=[],
                 trees={},
                 is_overflow=True):
    fname = config.get('GENERAL', 'hfile')
    verbose = config.getboolean('GENERAL', 'verbose')
    calc_qwfac = config.getboolean('GENERAL', 'calc_qwfac')
    apply_qwfac = config.getboolean('GENERAL', 'apply_qwfac')
    setQCD0error = config.getboolean('GENERAL', 'setQCD0error')
    weight = config.get('GENERAL', 'weight')
    test_nominal = config.getboolean('GENERAL', 'test_nominal')
    use_bin_opt = config.getboolean('GENERAL', 'use_bin_opt')
    interest_var = ast.literal_eval(config.get('GENERAL', 'var'))
    hname = OrderedDict(sorted(dnames.items(), key=lambda t: t[0]))
    bkgs_ = list(filter(lambda x: x not in ['QCD', 'data'], processlist))
    hvar = []
    hlist = []
    #CR_add_cut = '(top1_m < 150 ||top1_m > 200)'
    SR_add_cut = '(1==1)'
    CR_add_cut = '(1==1)'
    if 'shape' in sysname:
        is_shape = True
        shapelist = ast.literal_eval(config.get('SYSTEMATICS', 'shapelist'))
    else:
        is_shape = False
    if 'lN' in sysname:
        is_lN = True
        lNlist = ast.literal_eval(config.get('SYSTEMATICS', 'lNlist'))
    else:
        is_lN = False
    if is_weight:
        print 'is_weight'
        weight_name = sysname[1:].partition('_')[0]  #btagweight
        if 'top' not in weight_name and 'LHE' not in weight_name:
            weight = weight.replace(weight_name, sysname[1:] + '_' + direction)
            topweight = weight + '*topweight'
            #+'*topweight'
        else:
            print 'LHE or top'
            if 'top' in weight_name:
                topweight = weight + '*topweight_' + direction
            else:
                topweight = weight + '*topweight*{0}_{1}*{2}'.format(
                    sysname[1:], direction, LHE_fac[sysname + '_' + direction])
                print topweight
                print '*' * 80

    else:
        topweight = weight + '*topweight'
    #+'*topweight'

    if verbose: print 'weight: ', weight

    interest_var = ast.literal_eval(config.get('GENERAL', 'var'))
    control_var = ast.literal_eval(config.get('QCD_ESTIMATION',
                                              'control_vars'))
    plot_control = config.getboolean('QCD_ESTIMATION', 'plot_control')
    qcd_first = config.getboolean('QCD_ESTIMATION', 'qcd_first')
    plot_data = config.getboolean('QCD_ESTIMATION', 'plot_data')
    save_plots = config.getboolean('QCD_ESTIMATION', 'save_plots')

    if plot_control:
        interest_var += control_var
        print interest_var, 'interest_vars'

    fout = rt.TFile(fname, "UPDATE")
    xdist = -0.35
    add_cut = ''
    regcuts = []
    add_cut_nom = ''
    regcutsnom = []
    for item, cut in config.items('CUT'):
        if item not in ast.literal_eval(config.get('QCD_ESTIMATION',
                                                   'CR_vars')):
            add_cut += item + sysname + direction + cut + '&&'
            add_cut_nom += item + cut + '&&'
        else:
            if 'qgLR' not in item:
                add_cut += item + sysname + direction + '>=-1&&'
                add_cut_nom += item + '>=-1&&'
            else:
                add_cut += item + sysname + direction + '>0&&'
                add_cut_nom += item + '>0&&'
            if '>' in cut or '>=' in cut: SRdir = 0
            else: SRdir = 1
            regcuts.append([
                item + sysname + direction,
                [s for s in re.findall(r'-?\d+\.?\d*', cut)][0], SRdir
            ])
            regcutsnom.append(
                [item, [s for s in re.findall(r'-?\d+\.?\d*', cut)][0], SRdir])

    add_cut_nom = add_cut_nom[:-2]  #Remove last &&
    add_cut = add_cut[:-2]  #Remove last &&

    if verbose:
        print add_cut, add_cut_nom, 'cuts for qcd est'
        print regcuts, regcutsnom, 'regcuts'
    #print 'other cuts: ',add_cut

    regions = OrderedDict()
    regionsnom = OrderedDict()

    # regions["CR1"]={'cut':'(jet_CSV[0]<0.9535||jet_CSV[1]<0.9535 && (jet_CSV[0]>=0.8484 && jet_CSV[1]>=0.8484))','data':None,'bkg':None,'QCD':None}
    # regions["CR2"]={'cut':'((jet_CSV[0]<0.8484 || jet_CSV[1]<0.8484) && qgLR<0.722416)','data':None,'bkg':None,'QCD':None}
    # regions["VR"]={'cut':'((jet_CSV[0]<0.8484 || jet_CSV[1]<0.8484) && qgLR>0.722416)','data':None,'bkg':None,'QCD':None}
    # regions["SR"]={'cut':'(jet_CSV[0]>=0.9535 && jet_CSV[1]>=0.9535 )','data':None,'bkg':None,'QCD':None}

    regions["CR1"] = {
        'cut':
        '(' + regcuts[0][0] + ('<' if regcuts[0][2] else '>') + regcuts[0][1] +
        '&&' + regcuts[1][0] + ('>' if regcuts[1][2] else '<') +
        regcuts[1][1] + ')' + '&&' + CR_add_cut,
        'data':
        None,
        'bkg':
        None,
        'QCD':
        None
    }
    regions["CR2"] = {
        'cut':
        '(' + regcuts[0][0] + ('>' if regcuts[0][2] else '<') + regcuts[0][1] +
        '&&' + regcuts[1][0] + ('>' if regcuts[1][2] else '<') +
        regcuts[1][1] + ')' + '&&' + CR_add_cut,
        'data':
        None,
        'bkg':
        None,
        'QCD':
        None
    }
    regions["VR"] = {
        'cut':
        '(' + regcuts[0][0] + ('>' if regcuts[0][2] else '<') + regcuts[0][1] +
        '&&' + regcuts[1][0] + ('<' if regcuts[1][2] else '>') +
        regcuts[1][1] + ')' + '&&' + SR_add_cut,
        'data':
        None,
        'bkg':
        None,
        'QCD':
        None
    }
    regions["SR"] = {
        'cut':
        '(' + regcuts[0][0] + ('<' if regcuts[0][2] else '>') + regcuts[0][1] +
        '&&' + regcuts[1][0] + ('<' if regcuts[1][2] else '>') +
        regcuts[1][1] + ')' + '&&' + SR_add_cut,
        'data':
        None,
        'bkg':
        None,
        'QCD':
        None
    }

    regionsnom["CR1"] = {
        'cut':
        '(' + regcutsnom[0][0] + ('<' if regcutsnom[0][2] else '>') +
        regcutsnom[0][1] + '&&' + regcutsnom[1][0] +
        ('>' if regcutsnom[1][2] else '<') + regcutsnom[1][1] + ')' + '&&' +
        CR_add_cut,
        'data':
        None,
        'bkg':
        None,
        'QCD':
        None
    }
    regionsnom["CR2"] = {
        'cut':
        '(' + regcutsnom[0][0] + ('>' if regcutsnom[0][2] else '<') +
        regcutsnom[0][1] + '&&' + regcutsnom[1][0] +
        ('>' if regcutsnom[1][2] else '<') + regcutsnom[1][1] + ')' + '&&' +
        CR_add_cut,
        'data':
        None,
        'bkg':
        None,
        'QCD':
        None
    }
    regionsnom["VR"] = {
        'cut':
        '(' + regcutsnom[0][0] + ('>' if regcutsnom[0][2] else '<') +
        regcutsnom[0][1] + '&&' + regcutsnom[1][0] +
        ('<' if regcutsnom[1][2] else '>') + regcutsnom[1][1] + ')' + '&&' +
        SR_add_cut,
        'data':
        None,
        'bkg':
        None,
        'QCD':
        None
    }
    regionsnom["SR"] = {
        'cut':
        '(' + regcutsnom[0][0] + ('<' if regcutsnom[0][2] else '>') +
        regcutsnom[0][1] + '&&' + regcutsnom[1][0] +
        ('<' if regcutsnom[1][2] else '>') + regcutsnom[1][1] + ')' + '&&' +
        SR_add_cut,
        'data':
        None,
        'bkg':
        None,
        'QCD':
        None
    }

    if is_weight or test_nominal or is_lN or is_shape:
        regions = regionsnom
        add_cut = add_cut_nom

    print 'Doing QCD Estimate'
    for reg in regions:
        print reg, regions[reg]['cut']

    t_data = trees['data']

    scaleSR = scaleVR = 0

    for ivar, var in enumerate(interest_var):
        rt.gDirectory.GetList().Delete()
        varnom = var
        if is_weight == False and sysname != '' and is_lN == False and is_shape == False:
            var += sysname + direction
        for proc in hname:
            if sysname != '':
                if is_weight:
                    if 'btag' in sysname:
                        nuis_name = sysname.replace('btagweight',
                                                    'CMS_btag') + direction
                    else:
                        nuis_name = '_CMS' + sysname.replace(
                            'weight', '_Weight') + direction
                elif is_lN:
                    nuis_name = sysname.replace('lN', '')
                elif is_shape:
                    nuis_name = sysname.replace('shape', '')
                else:
                    nuis_name = '_CMS' + sysname + '_j' + direction
            else:
                nuis_name = sysname + direction
        #print nuis_name
        #print is_lN
        for reg in regions:
            if verbose: print reg
            if not fout.GetDirectory(reg):
                fout.mkdir(reg)
            fout.cd(reg)

            if verbose: print 'doing ', reg, 'scaleVR = ', scaleVR
            if use_bin_opt:
                hopt = rt.TH1F('hdata' + reg + varnom + sysname,
                               'hdata' + reg + varnom + sysname,
                               len(opt_bin) - 1, opt_bin)
                t_data.Draw(varnom + '>>' + 'hdata' + reg + varnom + sysname,
                            "(" + add_cut_nom + ")*" + regionsnom[reg]['cut'])

                hdata = hopt.Clone('data_obs')
            else:
                t_data.Draw(
                    varnom + '>>' + 'hdata' + reg + varnom + sysname +
                    str(vartitle[varnom][1]),
                    "(" + add_cut_nom + ")*" + regionsnom[reg]['cut'])
                print varnom + '>>' + 'hdata' + reg + varnom + sysname + str(
                    vartitle[varnom]
                    [1]), "(" + add_cut_nom + ")*" + regionsnom[reg]['cut']
                #print reg, varnom + '>>'+ 'hdata'+reg+varnom+sysname+ str(vartitle[varnom][1]),"("+add_cut_nom+")*"+regionsnom[reg]['cut']
                #print 'data: ',"("+add_cut_nom+")*"+regionsnom[reg]['cut']
                hdata = rt.gDirectory.Get('hdata' + reg + varnom +
                                          sysname).Clone('data_obs')

            if is_overflow: AddOverflow(hdata)
            if sysname == '': hdata.Write()

            if verbose:
                print var.partition('_')[0] + '>>' + 'hdata' + reg + str(
                    vartitle[varnom]
                    [1]), "(" + add_cut_nom + ")*" + regions[reg]['cut']
            hdata.Sumw2()

            hbkg = hdata.Clone('bkg' + reg)
            hbkg.Reset()
            for process in bkgs_:
                #print process
                if process in processgroup and process != 'QCD':
                    for isub, subprocess in enumerate(processgroup[process]):
                        #print subprocess
                        if use_bin_opt:
                            hopt = rt.TH1F('h' + reg + subprocess + sysname,
                                           'h' + reg + subprocess + sysname,
                                           len(opt_bin) - 1, opt_bin)
                            trees[subprocess].Draw(
                                var + '>>' + 'h' + reg + subprocess + sysname,
                                weight + "*(" + add_cut + "&&" +
                                regions[reg]['cut'] + ')')
                        else:
                            trees[subprocess].Draw(
                                var + '>>' + 'h' + reg + subprocess + sysname +
                                str(vartitle[varnom][1]), weight + "*(" +
                                add_cut + "&&" + regions[reg]['cut'] + ')')

                        if isub == 0:
                            if use_bin_opt:
                                h = hopt.Clone(hname[process] + nuis_name)
                            else:
                                h = rt.gDirectory.Get(
                                    'h' + reg + subprocess +
                                    sysname).Clone(hname[process] + nuis_name)

                            if calc_qwfac and (reg == 'SR'):
                                Calculate_qwfrac(trees[subprocess],
                                                 weight + "*(" + add_cut + ')',
                                                 subprocess)
                            if is_overflow: AddOverflow(h)
                            h.Sumw2()
                            h.Scale(dscale[subprocess])
                            if apply_qwfac: h.Scale(qwfac[subprocess])
                            # if calc_qwfac:Calculate_qwfrac(tree[subprocess],weight,subprocess)
                            # else: h.Scale(qwfac[subprocess])
                        else:
                            if use_bin_opt:
                                hsub = hopt.Clone(hname[process] + nuis_name)
                            else:
                                hsub = rt.gDirectory.Get(
                                    'h' + reg + subprocess +
                                    sysname).Clone(hname[process] + nuis_name)

                            if calc_qwfac and (reg == 'SR'):
                                Calculate_qwfrac(trees[subprocess],
                                                 weight + "*(" + add_cut + ')',
                                                 subprocess)
                            if is_overflow: AddOverflow(hsub)
                            # if calc_qwfac:Calculate_qwfrac(tree[subprocess],weight,subprocess)
                            # else:h.Scale(qwfac[subprocess])
                            hsub.Sumw2()
                            hsub.Scale(dscale[subprocess])
                            if apply_qwfac: hsub.Scale(qwfac[subprocess])
                            h.Add(hsub)
                        if verbose:
                            print 'subprocess: ', var + '>>' + 'h' + reg + subprocess + str(
                                vartitle[varnom]
                                [1]), weight + "*(" + add_cut + "&&" + regions[
                                    reg]['cut'] + ')'
                        #print type(hbkg),type(h)
                    if is_lN:
                        #print nuis_name[1:]
                        #print dnames[process]
                        if lNlist[dnames[process]].has_key(nuis_name[1:]):
                            if direction == 'Up':
                                h.Scale(
                                    lNlist[dnames[process]][nuis_name[1:]][0])
                                h.SetName(h.GetName() + direction)
                            elif direction == 'Down':
                                h.Scale(
                                    lNlist[dnames[process]][nuis_name[1:]][1])
                                h.SetName(h.GetName() + direction)
                            else:
                                print 'wtf mate'
                    hbkg.Add(h)
                    if direction in h.GetName() or sysname == '':
                        #print h.GetName()
                        #print reg
                        h.Write()

                elif 'ttbar' in process:
                    for tproc in ttCls:
                        if use_bin_opt:
                            hopt = rt.TH1F('h' + reg + tproc + var + sysname,
                                           'h' + reg + tproc + var + sysname,
                                           len(opt_bin) - 1, opt_bin)
                            trees[tproc].Draw(
                                var + '>>' + 'h' + reg + tproc + var + sysname,
                                topweight + "*(" + add_cut + "&&" +
                                ttCls[tproc] + "&&" + regions[reg]['cut'] +
                                ')')
                        else:
                            trees[tproc].Draw(
                                var + '>>' + 'h' + reg + tproc + var +
                                sysname + str(vartitle[varnom][1]), topweight +
                                "*(" + add_cut + "&&" + ttCls[tproc] + "&&" +
                                regions[reg]['cut'] + ')')
                            print var + '>>' + 'h' + reg + tproc + var + sysname + str(
                                vartitle[varnom][1]
                            ), topweight + "*(" + add_cut + "&&" + ttCls[
                                tproc] + "&&" + regions[reg]['cut'] + ')'

                        #print var + '>>'+ 'h'+reg+tproc+var+sysname+ str(vartitle[varnom][1]),topweight+"*("+add_cut+"&&"+ttCls[tproc]+"&&"+regions[reg]['cut']+')'
                        if verbose:
                            print 'ttbar options: ', var + '>>' + 'h' + reg + tproc + var + sysname + str(
                                vartitle[varnom][1]
                            ), topweight + "*(" + add_cut + "&&" + ttCls[
                                tproc] + "&&" + regions[reg]['cut'] + ')'
                        if use_bin_opt:
                            h = hopt.Clone(hname[tproc] + nuis_name)
                        else:
                            h = rt.gDirectory.Get('h' + reg + tproc + var +
                                                  sysname).Clone(hname[tproc] +
                                                                 nuis_name)
                        if calc_qwfac and (reg == 'SR'):
                            Calculate_qwfrac(
                                trees[tproc], topweight + "*(" + add_cut +
                                "&&" + ttCls[tproc] + ')', tproc)
                        if is_overflow: AddOverflow(h)
                        #print h.Integral()
                        if verbose:
                            print 'tproc before: ', tproc, ' ntproc:', h.Integral(
                            )
                        h.Sumw2()
                        h.Scale(dscale[process])
                        if apply_qwfac: h.Scale(qwfac[tproc])
                        if is_lN:
                            if lNlist[tproc].has_key(nuis_name[1:]):
                                if direction == 'Up':
                                    h.Scale(lNlist[tproc][nuis_name[1:]][0])
                                    h.SetName(h.GetName() + direction)
                                elif direction == 'Down':
                                    h.Scale(lNlist[tproc][nuis_name[1:]][1])
                                    h.SetName(h.GetName() + direction)
                                else:
                                    print 'wtf mate'

                        #if not is_weight and direction == 'Up':
                        #h.SetBinContent(1,h.GetBinContent(1)*1.02)

                        #rint 'tproc: ',tproc,' ntproc:', h.Integral()
                        #if reg in ['SR','VR']:h.Scale(qwfac[tproc])
                        if verbose:
                            print 'tproc: ', tproc, ' ntproc:', h.Integral()
                        hbkg.Add(h)
                        if direction in h.GetName() or sysname == '':
                            h.Write()

                else:
                    if use_bin_opt:
                        hopt = rt.TH1F('h' + reg + process + sysname,
                                       'h' + reg + process + sysname,
                                       len(opt_bin) - 1, opt_bin)
                        trees[process].Draw(
                            var + '>>' + 'h' + reg + process + sysname,
                            weight + "*(" + add_cut + "&&" +
                            regions[reg]['cut'] + ')')
                        h = hopt.Clone(hname[process] + nuis_name)
                    else:
                        trees[process].Draw(
                            var + '>>' + 'h' + reg + process + sysname +
                            str(vartitle[varnom][1]), weight + "*(" + add_cut +
                            "&&" + regions[reg]['cut'] + ')')

                        h = rt.gDirectory.Get('h' + reg + process +
                                              sysname).Clone(hname[process] +
                                                             nuis_name)
                    if calc_qwfac and (reg == 'SR'):
                        Calculate_qwfrac(trees[process],
                                         weight + "*(" + add_cut + ')',
                                         process)
                    if is_overflow: AddOverflow(h)
                    h.Sumw2()
                    h.Scale(dscale[process])
                    if apply_qwfac: h.Scale(qwfac[process])
                    if is_lN:
                        if lNlist[dnames[process]].has_key(nuis_name[1:]):
                            if direction == 'Up':
                                h.Scale(
                                    lNlist[dnames[process]][nuis_name[1:]][0])
                                h.SetName(h.GetName() + direction)
                            elif direction == 'Down':
                                h.Scale(
                                    lNlist[dnames[process]][nuis_name[1:]][1])
                                h.SetName(h.GetName() + direction)
                            else:
                                print 'wtf mate'
                    #if reg in ['SR','VR']:h.Scale(qwfac[process])
                    if h.Integral() < 0: print process
                    if verbose: print 'before: ', hbkg.Integral()
                    if verbose:
                        print 'process ', process, ' integral: ', h.Integral()
                    hbkg.Add(h)
                    if verbose: print 'after: ', hbkg.Integral()
                    if direction in h.GetName() or sysname == '':
                        h.Write()

            hres = hdata.Clone("hbkgsub" + reg)
            print 'Data evts: ', hdata.Integral()
            print 'background evts without QCD: ', hbkg.Integral()
            hres.Add(hbkg, -1)
            #Set_Zero(hres)
            regions[reg]['QCD'] = hres
            if verbose: print 'QCD estimate ', hres.Integral()
            regions[reg]['bkg'] = hbkg
            regions[reg]['data'] = hdata.Clone('Data' + reg)

            if "CR" not in reg:
                if reg == 'SR':
                    if regions['CR1']['QCD'] == None:
                        print 'Do CRs first!'
                        continue
                    elif scaleVR == 0:
                        print 'Do VR first!'
                        continue
                    else:

                        if ivar == 0:
                            nqcd = regions['CR1']['QCD'].Integral()
                            scaleSR = hres.Integral() / nqcd
                            # nqcd = regions['CR1']['QCD'].GetBinContent(1)
                            # scaleSR = hres.GetBinContent(1)/nqcd
                            #scaleSR = scaleVR
                        print 'SR/CR1: ', scaleSR, 'nqcd CR1: ', nqcd

                        hSR = regions['CR1']['QCD'].Clone('QCD' + nuis_name)
                        hSR.Scale(scaleSR)
                        if is_shape:  #hot fix for shape extrapolation uncertainty
                            correction = shapelist['QCD']['bkg_extrap']
                            if direction == 'Down':
                                correction = [
                                    2 - bin
                                    for bin in shapelist['QCD']['bkg_extrap']
                                ]
                            for bin, corr in enumerate(correction):
                                hSR.SetBinContent(
                                    bin + 1,
                                    hSR.GetBinContent(bin + 1) * corr)
                            hSR.SetName('QCD' + nuis_name + direction)

                        regions[reg]['QCD'] = hSR
                        if is_lN: hSR.SetName('QCD' + nuis_name + direction)
                        hSR.Write()

                if reg == 'VR':
                    if regions['CR2']['QCD'] == None:
                        print 'Do CRs first!'
                        continue

                    else:
                        if ivar == 0:
                            nqcd = regions['CR2']['QCD'].Integral()
                            scaleVR = hres.Integral() / nqcd
                            # nqcd = regions['CR2']['QCD'].GetBinContent(1)
                            # scaleVR = hres.GetBinContent(1)/nqcd
                            print 'VR/CR2: ', scaleVR, 'nqcd CR2: ', nqcd
                        hSR = regions['CR2']['QCD'].Clone('QCD' + nuis_name)
                        hSR.Scale(scaleVR)
                        regions[reg]['QCD'] = hSR
                        if is_lN: hSR.SetName('QCD' + nuis_name + direction)
                        hSR.Write()
            else:
                hres.SetName('QCD' + nuis_name)
                if is_lN: hres.SetName('QCD' + nuis_name + direction)
                hres.Write()
            fout.cd("../")

        if plot_control:
            for reg in regions:
                colors = {
                    'ttbar': ['#2c7fb8', 't#bar{t} + Minor Bkgs.'],
                    'Multijet': ['#31a354', 'Multijet']
                }
                if plot_data:
                    regions[reg]['data'].SetMarkerColor(1)
                    regions[reg]['data'].SetMarkerStyle(20)
                    regions[reg]['data'].SetMarkerSize(1.0)
                regions[reg]['bkg'].SetFillColor(
                    rt.TColor.GetColor(colors['ttbar'][0]))
                regions[reg]['QCD'].SetFillColor(
                    rt.TColor.GetColor(colors['Multijet'][0]))
                hstack = rt.THStack(vartitle[varnom][0] + reg,
                                    vartitle[varnom][0] + reg)
                if qcd_first:
                    hstack.Add(regions[reg]['bkg'])
                    hstack.Add(regions[reg]['QCD'])
                else:
                    hstack.Add(regions[reg]['QCD'])
                    hstack.Add(regions[reg]['bkg'])

                c = rt.TCanvas(var + reg + weight, var + reg + weight, 5, 30,
                               W_ref, H_ref)
                pad1 = rt.TPad("pad1", "pad1", 0.0, 0.15 if plot_data else 0.0,
                               1, 1.0)
                pad1.Draw()
                pad1.cd()
                SetupCanvas(pad1, vartitle[varnom][2])
                if use_bin_opt:
                    hframe = rt.TH1F(
                        var + reg,
                        "h; {0}; Events ".format(vartitle[varnom][0]),
                        len(opt_bin) - 1, opt_bin)
                else:
                    hframe = rt.TH1F(
                        var + reg,
                        "h; {0}; Events ".format(vartitle[varnom][0]),
                        vartitle[varnom][1][0], vartitle[varnom][1][1],
                        vartitle[varnom][1][2])
                hframe.SetAxisRange(
                    0.1, regions[reg]['data'].GetMaximum() *
                    1e4 if vartitle[varnom][2] == 1 else
                    regions[reg]['data'].GetMaximum() * 1.8, "Y")
                xAxis = hframe.GetXaxis()
                xAxis.SetNdivisions(6, 5, 0)
                yAxis = hframe.GetYaxis()
                yAxis.SetNdivisions(6, 5, 0)
                yAxis.SetTitleOffset(1)
                hframe.Draw()
                c.Update()
                c.Modified()
                hstack.Draw("sameaxis")
                hstack.Draw('histsame')
                herr = regions[reg]['QCD'].Clone('stat.err')
                herr.Add(regions[reg]['bkg'])
                herr.SetFillColor(rt.kBlack)
                herr.SetMarkerStyle(0)
                herr.SetFillStyle(3354)
                rt.gStyle.SetHatchesLineWidth(1)
                rt.gStyle.SetHatchesSpacing(2)
                if plot_data: regions[reg]['data'].Draw("esamex0")
                herr.Draw('e2same')
                CMS_lumi.CMS_lumi(c, iPeriod, iPos)

                pad1.cd()
                pad1.Update()
                pad1.RedrawAxis()
                frame = c.GetFrame()

                latex = rt.TLatex()

                legend = rt.TPad("legend_0", "legend_0", x0_l - 0.15, y0_l,
                                 x1_l, y1_l)

                legend.Draw()
                legend.cd()

                if plot_data:
                    gr_l = rt.TGraphErrors(1, x_l, y_l, ex_l, ey_l)
                    rt.gStyle.SetEndErrorSize(0)
                    gr_l.SetMarkerSize(0.9)
                    gr_l.Draw("0P")

                latex.SetTextFont(42)
                latex.SetTextAngle(0)
                latex.SetTextColor(rt.kBlack)
                latex.SetTextSize(0.12)
                latex.SetTextAlign(12)
                yy_ = y_l[0]
                if plot_data:
                    latex.DrawLatex(xx_ + 1. * bwx_, yy_, "Data")
                latex.DrawLatex(xx_ + 1. * bwx_, yy_ - gap_, reg)
                for hist in colors:
                    box_ = rt.TBox()
                    SetupBox(box_, yy_, rt.TColor.GetColor(colors[hist][0]))
                    box_.DrawBox(xx_ - bwx_ / 2 - xdist, yy_ - bwy_ / 2,
                                 xx_ + bwx_ / 2 - xdist, yy_ + bwy_ / 2)
                    box_.SetFillStyle(0)
                    box_.DrawBox(xx_ - bwx_ / 2 - xdist, yy_ - bwy_ / 2,
                                 xx_ + bwx_ / 2 - xdist, yy_ + bwy_ / 2)
                    latex.DrawLatex(xx_ + 1. * bwx_ - xdist, yy_,
                                    colors[hist][1])
                    yy_ -= gap_

                box_ = rt.TBox()
                SetupBox(box_, yy_)
                box_.SetFillStyle(3354)
                box_.DrawBox(xx_ - bwx_ / 2 - xdist, yy_ - bwy_ / 2,
                             xx_ + bwx_ / 2 - xdist, yy_ + bwy_ / 2)
                latex.DrawLatex(xx_ + 1. * bwx_ - xdist, yy_, 'Stat. Uncert.')
                yy_ -= gap_
                c.Update()
                c.cd()
                if plot_data:
                    p1r = rt.TPad("p4", "", 0, 0, 1, 0.26)

                    p1r.SetRightMargin(0.04)
                    p1r.SetLeftMargin(0.12)
                    p1r.SetTopMargin(0.0)
                    p1r.SetBottomMargin(0.42)
                    p1r.SetTicks()
                    p1r.Draw()
                    p1r.cd()

                    xmin = float(herr.GetXaxis().GetXmin())
                    xmax = float(herr.GetXaxis().GetXmax())
                    one = rt.TF1("one", "1", xmin, xmax)
                    one.SetLineColor(1)
                    one.SetLineStyle(2)
                    one.SetLineWidth(1)

                    nxbins = herr.GetNbinsX()
                    hratio = regions[reg]['data'].Clone()

                    he = herr.Clone()
                    he.SetFillColor(16)
                    he.SetFillStyle(1001)
                    print reg
                    for b in range(nxbins):
                        nbkg = herr.GetBinContent(b + 1)
                        ebkg = herr.GetBinError(b + 1)

                        ndata = regions[reg]['data'].GetBinContent(b + 1)
                        edata = regions[reg]['data'].GetBinError(b + 1)
                        r = ndata / nbkg if nbkg > 0 else 0

                        #print 'bin: ',b+1,  ' r: ',r
                        #print str(r) + '\t'
                        rerr = edata / nbkg if nbkg > 0 else 0

                        hratio.SetBinContent(b + 1, r)
                        hratio.SetBinError(b + 1, rerr)

                        he.SetBinContent(b + 1, 1)
                        he.SetBinError(b + 1, ebkg / nbkg if nbkg > 0 else 0)

                    hratio.GetYaxis().SetRangeUser(0.0, 2.0)

                    hratio.SetTitle("")

                    hratio.GetXaxis().SetTitle(vartitle[varnom][0])
                    hratio.GetXaxis().SetTitleSize(0.156)
                    hratio.GetXaxis().SetLabelSize(0.171)
                    #hratio.GetXaxis().SetTickLength(0.09)

                    #for b in range(hratio.GetNbinsX()):
                    #    hratio.GetXaxis().SetBinLabel(b+1, str(int(hratio.GetBinLowEdge(b+1))) )

                    hratio.GetXaxis().SetLabelOffset(0.02)

                    hratio.GetYaxis().SetTitleSize(0.196)
                    hratio.GetYaxis().SetLabelSize(0.171)
                    hratio.GetYaxis().SetTitleOffset(0.30)
                    hratio.GetYaxis().SetTitle("      Data/MC")
                    hratio.GetYaxis().SetDecimals(1)
                    hratio.GetYaxis().SetNdivisions(3, 2, 0,
                                                    rt.kTRUE)  #was 402
                    hratio.GetXaxis().SetNdivisions(6, 5, 0)

                    hratio.Draw("pe")
                    #    setex2.Draw()
                    he.Draw("e2same")
                    one.Draw("SAME")
                    #turn off horizontal error bars
                    #    setex1.Draw()
                    hratio.Draw("PEsame")
                    hratio.Draw("PE0X0same")
                    hratio.Draw("sameaxis")  #redraws the axes
                    p1r.Update()
                if save_plots:
                    if not os.path.exists(destination + "/QCD Estimation"):
                        os.makedirs(destination + "/QCD Estimation")
                    else:
                        print "WARNING: directory already exists. Will overwrite existing files..."
                        c.SaveAs(destination + "/QCD Estimation/" + reg + var +
                                 ".pdf")

        # fout.cd()
        # for reg in regions:
        #     regions[reg]['data'].Write()
        #     regions[reg]['bkg'].Write()
        #     regions[reg]['QCD'].Write()
        #     if verbose:
        #         regions[reg]['data'].GetName()
        #         print regions[reg]['bkg'].GetName()
        #         print regions[reg]['QCD'].GetName()

    fout.Close()
Ejemplo n.º 20
0
def main():
    if len(sys.argv) > 1:
        fstate = sys.argv[1]
    else:
        fstate = ''
    decor = fstate
    if decor != '':
        decor += '_'

    sources = ('%s/fig_%sbkg.root' % (PATH, decor), 'bkg', kMagenta + 1)

    # ---------------------------------------
    # get data histogram
    # ---------------------------------------
    filename = '%s/fig_%sdata.root' % (PATH, decor)
    fdata = TFile(filename)
    if not fdata.IsOpen():
        sys.exit("** can't open file %s" % filename)
    hdata = fdata.Get(HNAME)
    if not hdata: sys.exit("** can't find hbnn")

    # ---------------------------------------
    # get source histogram
    # ---------------------------------------
    filename, hname, color = sources
    fsrc = TFile(filename)
    if not fsrc.IsOpen():
        sys.exit("** can't open file %s" % fsrc)
    hsrc = fsrc.Get(HNAME).Clone(hname)
    if not hsrc: sys.exit("** can't find histogram")

    # ---------------------------------------
    # set up some standard graphics style
    # ---------------------------------------
    tdrstyle.setTDRStyle()
    #gStyle.SetCanvasPreferGL(True)
    gStyle.SetPadRightMargin(0.12)
    #gStyle.SetOptStat('ei')
    gStyle.SetOptStat('i')
    gStyle.SetStatFont(42)
    gStyle.SetStatFontSize(0.03)
    gStyle.SetStatBorderSize(1)
    gStyle.SetStatH(0.2)
    gStyle.SetStatW(0.3)
    gStyle.SetStatX(0.83)
    gStyle.SetStatY(0.93)

    # change the CMS_lumi variables (see CMS_lumi.py)
    iPeriod = 4
    iPos = 0
    CMS_lumi.relPosX = 0.12
    CMS_lumi.lumi_13TeV = "36.0 fb^{-1}"
    CMS_lumi.writeExtraText = 1
    CMS_lumi.extraText = "Preliminary"
    vdouble = vector("double")

    # ---------------------------------------
    # plot data
    # ---------------------------------------
    ymax = 1.2 * hdata.GetMaximum()
    ii = int(ymax / 10)
    ymax = (ii + 1) * 10

    hdata.SetMaximum(ymax)
    hdata.SetNdivisions(505, 'X')

    xbins = int(hdata.GetNbinsX())
    width = hdata.GetXaxis().GetBinWidth(1)
    xmin = int(hdata.GetXaxis().GetBinLowEdge(1))
    xmax = int(hdata.GetXaxis().GetBinLowEdge(xbins) + width)

    postfix = "_%s_%3.3d_%3.3d" % (HNAME, xmin, xmax)

    cname = "fig_%sdata_%s" % (decor, postfix)
    canvas = TCanvas(cname, cname, 10, 10, 500, 500)
    canvas.cd()
    hdata.Draw("ep gl")
    canvas.Update()
    canvas.SaveAs('.png')
    gSystem.ProcessEvents()
    sleep(1)
    del canvas

    # ---------------------------------------
    # plot source
    # ---------------------------------------
    cname = "fig_%s%s%s" % (decor, hname, postfix)
    canvas = TCanvas(cname, cname, 10, 10, 500, 500)
    canvas.cd()
    hsrc.SetNdivisions(505, 'X')
    hsrc.Draw("hist gl")
    canvas.Update()
    canvas.SaveAs('.png')
    gSystem.ProcessEvents()
    sleep(1)
    del canvas

    # get counts
    datum = 0.0
    bkg = 0.0

    fb = []
    D = []
    for ii in xrange(xbins):
        bkg += hsrc.GetBinContent(ii + 1)
        datum += hdata.GetBinContent(ii + 1)

        if bkg > 10:
            fb.append(bkg)
            D.append(datum)

            print '%4d\t%10.2f\t%10.0f' % (len(D), bkg, datum)
            bkg = 0.0
            datum = 0.0

    # ---------------------------------------
    # fit
    # ---------------------------------------
    t = []
    bguess = sum(fb)
    fb = map(lambda x: x / bguess, fb)

    def Func(npar, grad, fval, xval, flag):
        fval[0] = 0.0
        B = xval[0]
        for i in xrange(len(D)):
            theory = B * fb[i]
            x = D[i] - theory
            fval[0] += x * x / theory

    minuit = TMinuit(1)
    minuit.SetPrintLevel(1)
    minuit.SetFCN(Func)
    minuit.SetErrorDef(1)

    # Find mode of posterior density
    # make some reasonable guesses for fit
    total = sum(D)
    status = Long()

    bstep = bguess / 1000
    bmin = 0.0
    bmax = 2 * total
    minuit.mnparm(0, "B", bguess, bstep, bmin, bmax, status)
    if status != 0:
        sys.exit("** mnparam status code: %d" % status)

    args = array('d')
    args.append(MAXITER)
    args.append(TOLERANCE)
    minuit.mnexcm(METHOD, args, 2, status)
    if status != 0:
        sys.exit("** mnexcm %s failed" % METHOD)

    # Print results
    print "-" * 80
    print "total observed count: %d" % total
    print "%-10s\t%10s" % ('source', "    estimated count")
    value = Double()
    dvalue = Double()
    minuit.GetParameter(0, value, dvalue)
    mode = value
    error = dvalue
    print "%-10s\t%10.1f +/-%- 10.1f" % \
      ("", mode, error)

    color = sources[-1]
    hsrc.SetLineColor(color + 2)
    hsrc.SetFillColor(color)
    hsrc.Scale(mode / hsrc.Integral())
    hsrc.SetMaximum(ymax)

    # compute GOF measure
    chisq = 0.0
    for i in xrange(len(D)):
        theory = mode * fb[i]
        x = D[i] - theory
        chisq += x * x / theory
    ndf = len(D) - 1

    print '\nchisq/NDF = %10.1f/%d = %10.2f\n' % (chisq, ndf, chisq / ndf)

    lg = mklegend(0.35, 0.72, 0.25, 0.2)
    lg.SetHeader('events(%s)' % FINALSTATES[fstate])

    lg.SetTextSize(0.04)
    lg.AddEntry(hdata, 'data  %4.0f' % hdata.Integral(), 'p')
    fname, src, color = sources
    src = capitalize(src)
    lg.AddEntry(hsrc,  '%-5s   %6.1f #pm %-6.1f (#color[4]{%6.1f})' \
                    % (src, mode, error, bguess), 'f')

    scribe = Scribe(0.43, 0.68)

    cname = "fig_%sresult%s" % (decor, postfix)
    cfit = TCanvas(cname, cname, 520, 10, 500, 500)
    cfit.cd()
    gStyle.SetOptStat('')

    hdata.SetMaximum(ymax)
    hdata.Draw('ep')
    hsrc.Draw('histsame')
    hdata.Draw('epsame')

    lg.Draw()
    scribe.write('#chi^{2}/NDF = %5.1f / %d = %5.2f\n' % \
                     (chisq, ndf, chisq/ndf))
    scribe.write('#font[12]{m}_{4#font[12]{l}} #in [%d, %d] GeV' %
                 (xmin, xmax))

    CMS_lumi.CMS_lumi(cfit, iPeriod, iPos)
    cfit.SaveAs('.png')
    cfit.Update()
    gSystem.ProcessEvents()

    sleep(5)
def drawHist(histName, plotInfo, plotDirectory, _file):

    canvas.cd()
    canvas.ResetDrawn()
    stack = THStack(histName, histName)
    for sample in stackList:
        #        print sample
        _dir = sample
        if "QCD" in sample:
            continue
            if useQCDMC: _dir = "QCDMu"
            if useQCDDD: _dir = "QCD_DD"
        hist = _file.Get("%s/%s_%s" % (_dir, histName, sample)).Clone(sample)
        hist.SetFillColor(mcList[sample][0])
        hist.SetLineColor(mcList[sample][0])
        hist.Rebin(plotInfo[2])
        stack.Add(hist)
    dataHist = _file.Get("DataMu/%s_DataMu" % (histName))
    dataHist.Rebin(plotInfo[2])

    #histograms list has flag whether it's log or not
    canvas.SetLogy(plotInfo[-1])

    if not plotInfo[-1]:
        stack.SetMaximum(1.45 * max(dataHist.GetMaximum(), stack.GetMaximum()))
    else:
        stack.SetMaximum(100. * max(dataHist.GetMaximum(), stack.GetMaximum()))

    stack.Draw("hist")
    # histograms list has x-axis title
    stack.GetHistogram().GetXaxis().SetTitle(plotInfo[0])
    if not -1 in plotInfo[3]:
        stack.GetHistogram().GetXaxis().SetRangeUser(plotInfo[3][0],
                                                     plotInfo[3][1])
        dataHist.GetXaxis().SetRangeUser(plotInfo[3][0], plotInfo[3][1])
    stack.GetHistogram().GetYaxis().SetTitle(plotInfo[1])

    dataHist.Draw("e,X0,same")
    legend.Draw("same")

    CMS_lumi.channelText = _channelText + plotInfo[4]
    CMS_lumi.CMS_lumi(canvas, 4, 11)
    canvas.Print("%s/%s.pdf" % (plotDirectory, histName), ".pdf")

    ratio = dataHist.Clone("temp")
    ratio.Add(stack.GetStack().Last(), -1)

    pad1.Clear()
    pad2.Clear()

    canvasRatio.cd()
    canvasRatio.ResetDrawn()

    pad1.Clear()
    pad2.Clear()

    pad1.cd()

    pad1.SetLogy(plotInfo[-1])
    stack.Draw('HIST')
    #    pad1.Update()
    y2 = pad1.GetY2()

    stack.SetMinimum(1)
    #    pad1.Update()
    stack.GetXaxis().SetTitle('')
    #    stack.GetYaxis().SetTitle(dataHist.GetYaxis().GetTitle())

    stack.SetTitle('')
    stack.GetXaxis().SetLabelSize(0)
    stack.GetYaxis().SetLabelSize(gStyle.GetLabelSize() /
                                  (1. - padRatio + padOverlap))
    stack.GetYaxis().SetTitleSize(gStyle.GetTitleSize() /
                                  (1. - padRatio + padOverlap))
    stack.GetYaxis().SetTitleOffset(gStyle.GetTitleYOffset() *
                                    (1. - padRatio + padOverlap))
    dataHist.Draw('E,X0,SAME')
    legendR.Draw()
    ratio.SetTitle('')

    ratio.GetXaxis().SetLabelSize(gStyle.GetLabelSize() /
                                  (padRatio + padOverlap))
    ratio.GetYaxis().SetLabelSize(gStyle.GetLabelSize() /
                                  (padRatio + padOverlap))
    ratio.GetXaxis().SetTitleSize(gStyle.GetTitleSize() /
                                  (padRatio + padOverlap))
    ratio.GetYaxis().SetTitleSize(gStyle.GetTitleSize() /
                                  (padRatio + padOverlap))
    ratio.GetYaxis().SetTitleOffset(gStyle.GetTitleYOffset() *
                                    (padRatio + padOverlap - padGap))
    #    ratio.GetYaxis().SetRangeUser(0.75,1.25)
    ratio.SetMaximum(1.15 * ratio.GetMaximum())
    ratio.GetYaxis().SetNdivisions(504)
    ratio.GetXaxis().SetTitle(plotInfo[0])
    ratio.GetYaxis().SetTitle("#splitline{QCD}{Template}")
    ratio.GetYaxis().SetTitleOffset(0.4)

    pad2.cd()
    ratio.SetMarkerStyle(dataHist.GetMarkerStyle())
    ratio.SetMarkerSize(dataHist.GetMarkerSize())
    ratio.SetLineColor(dataHist.GetLineColor())
    ratio.SetLineWidth(dataHist.GetLineWidth())

    oneLine = TF1("oneline", "1", -9e9, 9e9)
    oneLine.SetLineColor(kBlack)
    oneLine.SetLineWidth(1)
    oneLine.SetLineStyle(2)
    TGaxis.SetExponentOffset(-0.075, 0.0, "y")
    ratio.SetFillColor(kGreen + 3)
    ratio.SetLineColor(kGreen + 3)
    ratio.SetMarkerSize(0)

    ratio.Draw('h')
    #    oneLine.Draw("same")

    #    pad2.Update()
    CMS_lumi.CMS_lumi(pad1, 4, 11)
    canvasRatio.Update()
    canvasRatio.RedrawAxis()

    canvasRatio.SaveAs("%s/%s_ratio.pdf" % (plotDirectory, histName))
    canvasRatio.SetLogy(0)
    rp.GetYaxis().SetTitleSize(20)
    rp.GetYaxis().SetTitleFont(43)
    rp.GetYaxis().SetTitleOffset(1.55)
    rp.GetYaxis().SetLabelFont(43)
    rp.GetYaxis().SetLabelSize(15)

    rp.GetXaxis().SetTitleSize(20)
    rp.GetXaxis().SetTitleFont(43)
    rp.GetXaxis().SetTitleOffset(4.)
    rp.GetXaxis().SetLabelFont(43)
    rp.GetXaxis().SetLabelSize(15)

    rp.Draw("ep")

    #draw CMS and lumi text
    CMS_lumi.writeExtraText = True
    CMS_lumi.extraText = "Preliminary"
    CMS_lumi.lumi_sqrtS = lumiText + " (13 TeV)"
    CMS_lumi.cmsTextSize = 0.6
    CMS_lumi.lumiTextSize = 0.46
    CMS_lumi.extraOverCmsTextSize = 0.75
    CMS_lumi.relPosX = 0.12
    CMS_lumi.CMS_lumi(pad1, 0, 0)

    canvas.Update()

    canvas.SaveAs(outputDir + "/" + DATA_list[i].GetTitle() + ".pdf")
    canvas.SaveAs(outputDir + "/" + DATA_list[i].GetTitle() + ".png")

print "plots done"
legend = TLegend(0.638778, 0.640577, 1.0005, 0.879506, "", "brNDC")
#legend = TLegend(gPad.GetUxmax()-3.5, gPad.GetUymax()-3.5,gPad.GetUxmax()+0.1,gPad.GetUymax()-0.3,"","br")
legend.AddEntry(graph_comb, "Combination", "lf")
legend.AddEntry(sm, "SM", "l")
legend.SetFillStyle(0)
legend.SetBorderSize(0)

extraLabel = TLatex()
extraLabel.SetTextSize(0.03)
extraLabel.SetTextAngle(0)
extraLabel.SetTextAlign(32)
extraLabel.SetTextFont(22)

graph_comb.Draw("E2same")
sm.Draw()
if not comb_text == "": comb_line.Draw()
graph.Draw("P")
comb.DrawLatex(4.88747, 6.10814, comb_text)
#comb.DrawLatex(gPad.GetUxmax()-0.5,gPad.GetUymax()*2/3.,comb_text)
extraLabel.DrawLatex(gPad.GetUxmax() - 0.1,
                     gPad.GetUymax() - 0.2, "H#rightarrowWW")
#legend.Draw()

CMS_lumi.CMS_lumi(canvas, 4, iPos)

gPad.RedrawAxis()
canvas.Update()
canvas.SaveAs("signalstrength2018_1.png")
a = raw_input()
Ejemplo n.º 24
0
c.cd()
leg = TLegend(0.45, 0.7, 0.85, 0.9)
leg.SetLineColor(0)
leg.SetFillColor(0)
leg.SetFillStyle(0)
leg.AddEntry(h_mjjQCD, "QCD", "l")
leg.AddEntry(h_mjjSB, "QCD + q* (4 TeV, 0.06 pb^{-1})", "l")
leg.AddEntry(g_eff[1], "data", "p")

h_mjjQCD.Draw("hist")
#g_eff[0].Draw("al")
h_mjjSB.Draw("hist same")
g_eff[1].Draw("pe0 same")
leg.Draw()
#draw the lumi text on the canvas
CMS_lumi.CMS_lumi(c, iPeriod, iPos)

c.SaveAs(outputDir + "/deltaeta_check_" + tag + ".png")
c.SaveAs(outputDir + "/deltaeta_check_" + tag + ".pdf")
c.Write()
h_mjjQCD.Write()
g_eff[0].Write()
g_eff[1].Write()

#-----------  with ratio -----------
c2 = TCanvas('c2', 'c2', 600, 650)
c2.cd()
#----- pad 1 -----------
pad1 = TPad("pad1", "pad1", 0, 0.15, 1, 1)
#pad1.SetRightMargin(0.1)
Ejemplo n.º 25
0
sig_.Draw('hist,same')
bkg_.Draw('hist,same')
CMS_lumi.channelText = _channelText
legend.Draw("same")
ratio.GetXaxis().SetLabelSize(gStyle.GetLabelSize() / (padRatio + padOverlap))
ratio.GetYaxis().SetLabelSize(gStyle.GetLabelSize() / (padRatio + padOverlap))
ratio.GetXaxis().SetTitleSize(gStyle.GetTitleSize() / (padRatio + padOverlap))
ratio.GetYaxis().SetTitleSize(gStyle.GetTitleSize() / (padRatio + padOverlap))
ratio.GetYaxis().SetTitleOffset(gStyle.GetTitleYOffset() *
                                (padRatio + padOverlap - padGap))
ratio.GetYaxis().SetRangeUser(0.5, 1.5)
ratio.GetYaxis().SetNdivisions(504)
if finalState == "mu":
    ratio.GetXaxis().SetTitle("(#mu^{+},#mu^{-}) invariant mass (GeV)")
else:
    ratio.GetXaxis().SetTitle("(e^{+},e^{-}) invariant mass (GeV)")

ratio.GetYaxis().SetTitle("Data/MC")
CMS_lumi.CMS_lumi(pad1, 4, 11)

pad2.cd()

ratio.Draw('e,x0')
oneLine.Draw("same")

canvasRatio.Update()
canvasRatio.RedrawAxis()
CMS_lumi.channelText = _channelText
canvasRatio.SaveAs("DilepMass_prefit_%s_%s%s_ratio.pdf" %
                   (finalState, ext, zjets))
Ejemplo n.º 26
0
def EffiGraph1D(effDataList,
                effMCList,
                sfList,
                nameout,
                xAxis='pT',
                yAxis='eta'):

    W = 800
    H = 800
    yUp = 0.45
    canName = 'toto' + xAxis

    c = rt.TCanvas(canName, canName, 50, 50, H, W)
    c.SetTopMargin(0.055)
    c.SetBottomMargin(0.10)
    c.SetLeftMargin(0.12)

    p1 = rt.TPad(canName + '_up', canName + '_up', 0, yUp, 1, 1, 0, 0, 0)
    p2 = rt.TPad(canName + '_do', canName + '_do', 0, 0, 1, yUp, 0, 0, 0)
    p1.SetBottomMargin(0.0075)
    p1.SetTopMargin(c.GetTopMargin() * 1 / (1 - yUp))
    p2.SetTopMargin(0.0075)
    p2.SetBottomMargin(c.GetBottomMargin() * 1 / yUp)
    p1.SetLeftMargin(c.GetLeftMargin())
    p2.SetLeftMargin(c.GetLeftMargin())
    firstGraph = True
    leg = rt.TLegend(0.5, 0.80, 0.95, 0.92)
    leg.SetFillColor(0)
    leg.SetBorderSize(0)

    igr = 0
    listOfTGraph1 = []
    listOfTGraph2 = []
    listOfMC = []

    xMin = 10
    xMax = 120
    if 'pT' in xAxis or 'pt' in xAxis:
        p1.SetLogx()
        p2.SetLogx()
        xMin = 10
        xMax = 120
    elif 'vtx' in xAxis or 'Vtx' in xAxis or 'PV' in xAxis:
        xMin = 3
        xMax = 42
    elif 'eta' in xAxis or 'Eta' in xAxis:
        xMin = -2.60
        xMax = +2.60

    if 'abs' in xAxis or 'Abs' in xAxis:
        xMin = 0.0

    effminmax = findMinMax(effDataList)
    effiMin = effminmax[0]
    effiMax = effminmax[1]

    sfminmax = findMinMax(sfList)
    #    sfMin = sfminmax[0]
    sfMin = 0.8
    sfMax = 1.2

    for key in sorted(effDataList.keys()):
        grBinsEffData = effUtil.makeTGraphFromList(effDataList[key], 'min',
                                                   'max')
        grBinsSF = effUtil.makeTGraphFromList(sfList[key], 'min', 'max')
        grBinsEffMC = None
        if not effMCList is None:
            grBinsEffMC = effUtil.makeTGraphFromList(effMCList[key], 'min',
                                                     'max')
            grBinsEffMC.SetLineStyle(rt.kDashed)
            grBinsEffMC.SetLineColor(graphColors[igr])
            grBinsEffMC.SetMarkerSize(0)
            grBinsEffMC.SetLineWidth(2)

        grBinsSF.SetMarkerColor(graphColors[igr])
        grBinsSF.SetLineColor(graphColors[igr])
        grBinsSF.SetLineWidth(2)
        grBinsEffData.SetMarkerColor(graphColors[igr])
        grBinsEffData.SetLineColor(graphColors[igr])
        grBinsEffData.SetLineWidth(2)

        grBinsEffData.GetHistogram().SetMinimum(effiMin)
        grBinsEffData.GetHistogram().SetMaximum(effiMax)

        grBinsEffData.GetHistogram().GetXaxis().SetLimits(xMin, xMax)
        grBinsSF.GetHistogram().GetXaxis().SetLimits(xMin, xMax)
        grBinsSF.GetHistogram().SetMinimum(sfMin)
        grBinsSF.GetHistogram().SetMaximum(sfMax)

        grBinsSF.GetHistogram().GetXaxis().SetTitleOffset(1)
        if 'eta' in xAxis or 'Eta' in xAxis:
            grBinsSF.GetHistogram().GetXaxis().SetTitle("SuperCluster #eta")
        elif 'pt' in xAxis or 'pT' in xAxis:
            grBinsSF.GetHistogram().GetXaxis().SetTitle("p_{T}  [GeV]")
        elif 'vtx' in xAxis or 'Vtx' in xAxis or 'PV' in xAxis:
            grBinsSF.GetHistogram().GetXaxis().SetTitle("N_{vtx}")

        grBinsSF.GetHistogram().GetYaxis().SetTitle("Data / MC ")
        grBinsSF.GetHistogram().GetYaxis().SetTitleOffset(1)

        grBinsEffData.GetHistogram().GetYaxis().SetTitleOffset(1)
        grBinsEffData.GetHistogram().GetYaxis().SetTitle("Data efficiency")
        grBinsEffData.GetHistogram().GetYaxis().SetRangeUser(effiMin, effiMax)

        ### to avoid loosing the TGraph keep it in memory by adding it to a list
        listOfTGraph1.append(grBinsEffData)
        listOfTGraph2.append(grBinsSF)
        listOfMC.append(grBinsEffMC)
        if 'eta' in yAxis or 'Eta' in yAxis:
            leg.AddEntry(
                grBinsEffData, '%1.3f #leq | #eta | #leq  %1.3f' %
                (float(key[0]), float(key[1])), "PL")
        elif 'pt' in yAxis or 'pT' in yAxis:
            leg.AddEntry(
                grBinsEffData, '%3.0f #leq p_{T} #leq  %3.0f GeV' %
                (float(key[0]), float(key[1])), "PL")
        elif 'vtx' in yAxis or 'Vtx' in yAxis or 'PV' in yAxis:
            leg.AddEntry(
                grBinsEffData,
                '%3.0f #leq nVtx #leq  %3.0f' % (float(key[0]), float(key[1])),
                "PL")

    for igr in range(len(listOfTGraph1) + 1):

        option = "P"
        if igr == 1:
            option = "AP"

        use_igr = igr
        if use_igr == len(listOfTGraph1):
            use_igr = 0

        listOfTGraph1[use_igr].SetLineColor(graphColors[use_igr])
        listOfTGraph1[use_igr].SetMarkerColor(graphColors[use_igr])
        if not listOfMC[use_igr] is None:
            listOfMC[use_igr].SetLineColor(graphColors[use_igr])

        listOfTGraph1[use_igr].GetHistogram().SetMinimum(effiMin)
        listOfTGraph1[use_igr].GetHistogram().SetMaximum(effiMax)
        p1.cd()
        listOfTGraph1[use_igr].Draw(option)
        if not listOfMC[use_igr] is None:
            listOfMC[use_igr].Draw("ez")

        p2.cd()
        listOfTGraph2[use_igr].SetLineColor(graphColors[use_igr])
        listOfTGraph2[use_igr].SetMarkerColor(graphColors[use_igr])
        listOfTGraph2[use_igr].GetHistogram().SetMinimum(sfMin)
        listOfTGraph2[use_igr].GetHistogram().SetMaximum(sfMax)
        if 'pT' in xAxis or 'pt' in xAxis:
            listOfTGraph2[use_igr].GetHistogram().GetXaxis().SetMoreLogLabels()
        listOfTGraph2[use_igr].GetHistogram().GetXaxis().SetNoExponent()
        listOfTGraph2[use_igr].Draw(option)

    lineAtOne = rt.TLine(xMin, 1, xMax, 1)
    lineAtOne.SetLineStyle(rt.kDashed)
    lineAtOne.SetLineWidth(2)

    p2.cd()
    lineAtOne.Draw()

    c.cd()
    p2.Draw()
    p1.Draw()

    leg.Draw()
    CMS_lumi.CMS_lumi(c, 4, 10)

    c.Print(nameout)

    return listOfTGraph2
def plotUpperLimits(model, lambdas, helicity):

    N = len(lambdas)
    #yellow = TGraph(2*N)    # yellow band
    #green = TGraph(2*N)     # green band
    #median = TGraph(N)      # median line

    Mmin = [100 + i * 100 for i in range(40)]
    graphs = []
    for i in range(N):
        thislam = TGraph(len(Mmin))
        thislimit = []
        for mm in range(len(Mmin)):
            file_name = "./%sdataCards/ee_signif%s/higgsCombine%d.Significance.mH%d.root" % (
                model, helicity, Mmin[mm], lambdas[i])
            limit = getLimits(file_name)
            thislam.SetPoint(mm, Mmin[mm], limit[0])
            thislam.SetLineColor(i + 2)
            thislam.SetLineWidth(2)
            thislimit.append(limit[0])
        graphs.append(thislam.Clone())
        print "this minimum mass cut is %d" % Mmin[mm]
        print thislimit

        #yellow.SetPoint(    i,    values[i], limit[4] ) # + 2 sigma
        #green.SetPoint(     i,    values[i], limit[3] ) # + 1 sigma
        #median.SetPoint(    i,    labels[i], limit[0] ) # median
        #green.SetPoint(  2*N-1-i, values[i], limit[1] ) # - 1 sigma
        #yellow.SetPoint( 2*N-1-i, values[i], limit[0] ) # - 2 sigma

    W = 800
    H = 600
    T = 0.08 * H
    B = 0.12 * H
    L = 0.12 * W
    R = 0.04 * W
    c = TCanvas("c", "c", 100, 100, W, H)
    c.SetFillColor(0)
    c.SetBorderMode(0)
    c.SetFrameFillStyle(0)
    c.SetFrameBorderMode(0)
    c.SetLeftMargin(L / W)
    c.SetRightMargin(R / W)
    c.SetTopMargin(T / H)
    c.SetBottomMargin(B / H)
    c.SetTickx(0)
    c.SetTicky(0)
    c.SetGrid()
    c.cd()
    if model == "ADD": frame = c.DrawFrame(100, 0.01, 4000, 22)
    elif "Con" in helicity: frame = c.DrawFrame(100, 0.01, 4000, 15)
    else: frame = c.DrawFrame(100, 0.01, 4000, 10)
    frame.GetYaxis().CenterTitle()
    frame.GetYaxis().SetTitleSize(0.05)
    frame.GetXaxis().SetTitleSize(0.05)
    frame.GetXaxis().SetLabelSize(0.04)
    frame.GetYaxis().SetLabelSize(0.04)
    frame.GetYaxis().SetTitleOffset(0.9)
    frame.GetXaxis().SetNdivisions(508)
    frame.GetYaxis().CenterTitle(True)
    frame.GetYaxis().SetTitle("Significance")
    frame.GetXaxis().SetTitle("M_{min} [GeV]")
    frame.SetMinimum(0)
    #frame.SetMaximum(max(up2s)*1.05)
    #frame.GetXaxis().SetLimits(min(values),max(values))

    for gf in graphs:
        gf.Draw('Lsame')
    '''
    yellow.SetFillColor(ROOT.kOrange)
    yellow.SetLineColor(ROOT.kOrange)
    yellow.SetFillStyle(1001)
    yellow.Draw('F')
 
    green.SetFillColor(ROOT.kGreen+1)
    green.SetLineColor(ROOT.kGreen+1)
    green.SetFillStyle(1001)
    green.Draw('Fsame')
    
    median.SetLineColor(1)
    median.SetLineWidth(2)
    median.SetLineStyle(2)
    median.Draw('Lsame')'''

    CMS_lumi.CMS_lumi(c, 13, 11)
    ROOT.gPad.SetTicks(1, 1)
    frame.Draw('sameaxis')

    x1 = 0.75
    x2 = x1 + 0.24
    y2 = 0.86
    y1 = 0.60
    legend = TLegend(x1, y1, x2, y2)
    legend.SetFillStyle(0)
    legend.SetBorderSize(0)
    legend.SetTextSize(0.041)
    legend.SetTextFont(42)
    for i in range(N):
        legend.AddEntry(graphs[i], "#Lambda = %d" % lambdas[i], 'l')
    #legend.AddEntry(median, "Asymptotic CL_{s} expected",'L')
    #legend.AddEntry(green, "#pm 1 std. deviation",'f')
    #legend.AddEntry(green, "Asymptotic CL_{s} #pm 1 std. deviation",'f')
    #legend.AddEntry(yellow,"#pm 2 std. deviation",'f')
    #legend.AddEntry(green, "Asymptotic CL_{s} #pm 2 std. deviation",'f')
    legend.Draw()

    print " "
    c.SaveAs("%slimits/%sSignificance_ee%s.png" % (model, model, helicity))
    c.Close()
def plotSignificance(masses,
                     models,
                     cat="all",
                     doUnblind=False,
                     doPValue=True):

    directory = "/afs/cern.ch/work/l/lviliani/LatinosFramework13TeV_highmass/CMSSW_8_0_5/src/LatinoAnalysis/ShapeAnalysis/PlotsConfigurations/Configurations/EXO/WWlvlv_VBF/2015/combine2015_nocprime/"

    leg1 = TLegend(0.6, 0.65, 0.9, 0.9)
    leg1.SetBorderSize(0)
    leg1.SetFillStyle(0)

    xcentral = array("d")  # masses
    ycentral = array("d")  # limits
    obseved = array("d")
    xerr = array("d")

    c1 = makeCanvas("c1")
    c1.cd()
    mg = TMultiGraph()

    count = 0
    for model in models:
        count += 1
        xcentral = array("d")  # masses
        ycentral = array("d")  # limits
        observed = array("d")
        xerr = array("d")

        #            modelName = model.replace("c","c'= ").replace("0","0.").replace("brn"," BR_{new} = ").replace("0.0.","0.0").replace("10.","1.0")
        #            modelName = model.replace("brn00","").replace("c","c'= ").replace("0","0.").replace("10.","1.0")

        cp2 = float(model[1] + "." + model[2])
        gamma = str(cp2 * cp2)

        if gamma == "1.0":
            modelName = "#Gamma = #Gamma_{SM}"
        else:
            modelName = "#Gamma = " + gamma + " * #Gamma_{SM}"

        if cat == "all":
            CMS_lumi.extraText2 = "0+1+2 jets "
        else:
            CMS_lumi.extraText2 = cat.replace("jet", " jet ")

        for m in masses:

            if cat == "all":
                fitfile = directory + "Significance.ICHEP2016.mH" + m + "_" + model + ".txt"
                fitfileObs = directory + "Significance.ICHEP2016.unblind.mH" + m + "_" + model + ".txt"
            else:
                fitfile = directory + "Significance." + cat + ".ICHEP2016.mH" + m + "_" + model + ".txt"
                fitfileObs = directory + "Significance." + cat + ".ICHEP2016.unblind.mH" + m + "_" + model + ".txt"

            fitFile = open(
                fitfile
            )  #"/afs/cern.ch/work/l/lviliani/LatinosFramework13TeV_clean/CMSSW_7_6_3/src/LatinoAnalysis/ShapeAnalysis/PlotsConfigurations/Configurations/EXO/WWlvlv_VBF/combine/Limit.Moriond2016.2jet.mH"+m+".txt")
            sig = extract(fitFile, doPValue)
            fitFile.close()

            fitFileObs = open(fitfileObs)
            print fitFileObs
            sigObs = extract(fitFileObs, doPValue)
            fitFileObs.close()

            xcentral.append(float(m))
            xerr.append(0)
            ycentral.append(float(sig))
            observed.append(float(sigObs))
            print m, sigObs

        graph = TGraph(len(xcentral), xcentral, ycentral)
        graphObs = TGraph(len(xcentral), xcentral, observed)
        graph.SetLineStyle(2)
        graphObs.SetLineStyle(1)
        graph.SetLineWidth(2)
        graphObs.SetLineWidth(2)
        graph.SetLineColor(kBlue - 2 * count)
        graphObs.SetLineColor(kBlue - 2 * count)

        #            leg1.AddEntry(graph,modelName+" Expected","l")
        leg1.AddEntry(graphObs, modelName, "l")
        #            mg.Add(graph,"l")
        if doUnblind: mg.Add(graphObs, "l")

    mg.Draw("A")
    mg.GetYaxis().SetTitle("Significance (standard deviations)")
    mg.GetXaxis().SetTitle("M_{X} [GeV]")
    mg.GetXaxis().SetRangeUser(200, 1000)
    if doPValue:
        gPad.SetLogy()
        mg.GetYaxis().SetTitle("p-value")
        mg.GetYaxis().SetRangeUser(0.001, 2)
    else:
        mg.GetYaxis().SetRangeUser(0, 4)
    leg1.Draw()
    CMS_lumi.CMS_lumi(c1, 4, iPos)
    gPad.RedrawAxis()

    a = raw_input()
Ejemplo n.º 29
0
legend.SetFillColor(0)
legend.SetFillStyle(0)
legend.SetMargin(0.35)
#legend.AddEntry(sigdists[8],legends[2],"l")
legend.AddEntry(sigdists[0], legends[0], "l")
#legend.AddEntry(sigdists[4],legends[1],"l")

jj = -1
for h in sigdists:
    jj += 1
    h.Draw("sameHISTC")

legend.Draw("same")

addInfo = rt.TPaveText(0.6728188, 0.5681818, 0.9295302, 0.6433566, "NDC")
# addInfo.AddText(labels[ii])
addInfo.SetFillColor(0)
addInfo.SetLineColor(0)
addInfo.SetFillStyle(0)
addInfo.SetBorderSize(0)
addInfo.SetTextFont(42)
addInfo.SetTextSize(0.040)
addInfo.SetTextAlign(12)
addInfo.Draw()
CMS_lumi.CMS_lumi(c1, iPeriod, iPos)
c1.Update()
c1.SaveAs("DiBosonInvMass_AllSignals.pdf")
c1.SaveAs("DiBosonInvMass_AllSignals.root")
time.sleep(100)
infileS.Close()
Ejemplo n.º 30
0
leg.AddEntry(Hbb.Fit.ErrUp, "fit errors", "L")
C2 = TCanvas("C2", "", 800, 800)
C2.cd()
Hbb.G.SetTitle("")
Hbb.G.Draw("AP")
Hbb.G.GetXaxis().SetTitle("m_{J} - m_{H} (GeV)")
Hbb.G.GetYaxis().SetTitle("R_{p/f}")
Hbb.G.GetYaxis().SetTitleOffset(1.3)
#Hbb.truthG.Draw("P same")
Hbb.Fit.fit.Draw("same")
Hbb.Fit.ErrUp.SetLineStyle(2)
Hbb.Fit.ErrUp.Draw("same")
Hbb.Fit.ErrDn.SetLineStyle(2)
Hbb.Fit.ErrDn.Draw("same")
leg.Draw()
CMS_lumi.CMS_lumi(C2, iPeriod, iPos)
C2.SaveAs("outputs/SR_Fit.pdf")

variable = "dijetmass_corr"

binBoundaries = [
    800, 838, 890, 944, 1000, 1058, 1118, 1181, 1246, 1313, 1383, 1455, 1530,
    1607, 1687, 1770, 1856, 1945, 2037, 2132, 2231, 2332, 2438, 2546, 2659,
    2775, 2895, 3019, 3147, 3279, 3416, 3558, 3704, 3854, 4010, 4171, 4337,
    4509
]

Hbb.MakeEstVariable(variable, binBoundaries, antitag, tag)
FILE = TFile("outputs/SR_output.root", "RECREATE")
FILE.cd()
V = TH1F("data_obs", "", len(binBoundaries) - 1, array('d', binBoundaries))