Beispiel #1
0
def make_plot_all_rods(error_dict, rod_dict, name):
    

    leg = TLegend(0,0,0,0)
    if 'lock' in name:
        leg = TLegend(0.18,0.85,0.50,0.55)
    else:
        leg = TLegend(0.18,0.85,0.40,0.55)
    leg.SetLineColor(0)
    leg.SetFillStyle(0)
    leg.SetShadowColor(0)
    leg.SetBorderSize(0)
    leg.SetNColumns(3)
    gStyle.SetLegendTextSize(0.045)

   
    v_hists = []
    #for e,c in zip(error_bits, error_colors):
    for e in error_bits:
        h = TH1F('h'+e,'h'+e, len(rod_dict), 0, len(rod_dict))
        h.SetFillStyle(1001)
        h.SetLineWidth(0)
        v_hists.append(h)
        v_hists[-1].SetDirectory(0)
        if bin(int('0x'+e, 16))[2:].zfill(4) == '0111':
            leg.AddEntry(v_hists[-1],'GOL 3',"f");
        elif bin(int('0x'+e, 16))[2:].zfill(4) == '1011':
            leg.AddEntry(v_hists[-1],'GOL 2',"f");
        elif bin(int('0x'+e, 16))[2:].zfill(4) == '1101':
            leg.AddEntry(v_hists[-1],'GOL 1',"f");
        elif bin(int('0x'+e, 16))[2:].zfill(4) == '1110':
            leg.AddEntry(v_hists[-1],'GOL 0',"f");
        else:
            leg.AddEntry(v_hists[-1],bin(int('0x'+e, 16))[2:].zfill(4),"f");
    h = leg.GetY2()-leg.GetY1();
    w = leg.GetX2()-leg.GetX1()*.6;
    leg.SetMargin(leg.GetNColumns()*h/(leg.GetNRows()*w))
    

    for key,val in error_dict.items():
        idx_rod = 0
        for i, key2 in enumerate(rod_dict):
            if key2 == key[:8]:
                idx_rod = i
        v_hists[int(key[11:12], 16)].Fill(idx_rod, val)
  
    stack  = THStack("stack","stack")
    for hist in v_hists:
        stack.Add(hist)

    if 'buff' in name:
        c1 = TCanvas( 'c1', 'c1', 2000, 500)
    else:
        c1 = TCanvas( 'c1', 'c1', 1000, 500)


    h1 = TH1F('h_1','h_1', len(rod_dict), 0, len(rod_dict))
    for i, key in enumerate(rod_dict):
        h1.GetXaxis().SetBinLabel(i+1,key)
        h1.SetBinContent(i+1,rod_dict[key])

 
    h1.GetXaxis().LabelsOption("v")
    h1.GetXaxis().SetTitle("ROD")
    h1.GetXaxis().SetTitleOffset(2.2)
    h1.GetYaxis().SetTitle("# of rocketio errors")
    h1.SetLineColor(kRed)
    h1.SetLineWidth(1)

    leg.AddEntry(h1,'total',"l");
    
    c1.SetBottomMargin(0.23)  
    h1.GetXaxis().SetTitle("ROD")
    h1.Draw("HIST")
    stack.Draw("PFC PLC SAME HIST")
    h1.Draw("SAMEHIST")
    AtlasStyle.ATLAS_LABEL(0.19,.88, 1, "Internal")
    leg.Draw()
    c1.Update()
    c1.Print("plots/"+name +".pdf")
    c1.Clear()
Beispiel #2
0
def efficiencyAll():
    #signals = {'XZHeebb':['eebb'],'XZHmmbb':['mmbb'],'XZHnnbb':['nnbb'],'XZHee0b':['ee0b'],'XZHmm0b':['mm0b'],'XZHnn0b':['nn0b'],'XZHVBFeebbVBF':['eebbVBF'],'XZHVBFmmbbVBF':['mmbbVBF'],'XZHVBFnnbbVBF':['nnbbVBF'],'XZHVBFee0bVBF':['ee0bVBF'],'XZHVBFmm0bVBF':['mm0bVBF'],'XZHVBFnn0bVBF':['nn0bVBF']}
    labels = {'XZHeebb' : "eeb#bar{b}",'XZHmmbb' : "#mu#mub#bar{b}",'XZHnnbb' : "#nu#nub#bar{b}",'XZHee0b' : "ee0b",'XZHmm0b' : "#mu#mu0b",'XZHnn0b' : "#nu#nu0b",'XZHVBFeebbVBF' : "eeb#bar{b}VBF",'XZHVBFmmbbVBF' : "#mu#mub#bar{b}VBF",'XZHVBFnnbbVBF' : "#nu#nub#bar{b}VBF",'XZHVBFee0bVBF' : "ee0bVBF",'XZHVBFmm0bVBF' : "#mu#mu0bVBF",'XZHVBFnn0bVBF' : "#nu#nu0bVBF"}
    colors = {'XZHeebb' : 2, 'XZHmmbb' : 4, 'XZHnnbb' : 2,'XZHee0b' : 3, 'XZHmm0b' : 6, 'XZHnn0b' : 4,'XZHVBFeebbVBF' : 2, 'XZHVBFmmbbVBF' : 4, 'XZHVBFnnbbVBF' : 2,'XZHVBFee0bVBF' : 3, 'XZHVBFmm0bVBF' : 6, 'XZHVBFnn0bVBF' : 4}
    styles = {'XZHeebb' : 1, 'XZHmmbb' : 1, 'XZHnnbb' : 1,'XZHee0b' : 1, 'XZHmm0b' : 1, 'XZHnn0b' : 1,'XZHVBFeebbVBF' : 1, 'XZHVBFmmbbVBF' : 1, 'XZHVBFnnbbVBF' : 1,'XZHVBFee0bVBF' : 1, 'XZHVBFmm0bVBF' : 1, 'XZHVBFnn0bVBF' : 1}
    marker = {'XZHeebb' : 22, 'XZHmmbb' : 20, 'XZHnnbb' : 22,'XZHee0b' : 22, 'XZHmm0b' : 20, 'XZHnn0b' : 20, 'XZHVBFeebbVBF' : 22, 'XZHVBFmmbbVBF' : 20, 'XZHVBFnnbbVBF' : 22,'XZHVBFee0bVBF' : 22, 'XZHVBFmm0bVBF' : 20, 'XZHVBFnn0bVBF' : 20}
    genPoints = [800, 1000, 1200, 1400, 1600, 1800, 2000, 2500, 3000, 3500, 4000, 4500, 5000]
    eff = {}

    for signal_samples in ['ZlepHinc','ZinvHinc','ZinvHincVBF','ZlepHincVBF']:
        if signal_samples == 'ZinvHinc':
            signals = {'XZHnnbb':['nnbb'],'XZHnn0b':['nn0b']}
            sign_list = ['XZHnnbb','XZHnn0b']
        elif signal_samples == 'ZlepHinc':
            signals = {'XZHeebb':['eebb'],'XZHmmbb':['mmbb'],'XZHee0b':['ee0b'],'XZHmm0b':['mm0b']}
            sign_list = ['XZHeebb','XZHmmbb','XZHee0b', 'XZHmm0b']
        elif signal_samples == 'ZinvHincVBF':
            signals = {'XZHVBFnnbbVBF':['nnbbVBF'],'XZHVBFnn0bVBF':['nn0bVBF']}
            sign_list = ['XZHVBFnnbbVBF', 'XZHVBFnn0bVBF']
        elif signal_samples == 'ZlepHincVBF':
            signals = {'XZHVBFeebbVBF':['eebbVBF'],'XZHVBFmmbbVBF':['mmbbVBF'],'XZHVBFee0bVBF':['ee0bVBF'],'XZHVBFmm0bVBF':['mm0bVBF']}
            sign_list = ['XZHVBFeebbVBF', 'XZHVBFmmbbVBF','XZHVBFee0bVBF', 'XZHVBFmm0bVBF']
        for sign, channels in signals.iteritems():
      
            treeSign = {}
            ngenSign = {}
            nevtSign = {}
            eff[sign] = TGraphErrors()
            eff[sign].SetTitle(sign)
            eff[sign].SetMarkerColor(colors[sign])
            eff[sign].SetMarkerSize(1.25)
            eff[sign].SetLineColor(colors[sign])
            eff[sign].SetLineWidth(2)
            eff[sign].SetLineStyle(styles[sign])
            eff[sign].SetMarkerStyle(marker[sign])

            for i, m in enumerate(genPoints):
                neff = 0.
                for channel in channels:
                    if signal_samples == 'ZinvHinc':
                        file_list = ['Ntuples2016/XZH/ZprimeToZHToZinvHall_narrow_M%s'%m,'Ntuples2017/XZH/ZprimeToZHToZinvHall_narrow_M%s'%m,'Ntuples2018/XZH/ZprimeToZHToZinvHall_narrow_M%s'%m]
                    elif signal_samples == 'ZlepHinc':
                        file_list = ['Ntuples2016/XZH/ZprimeToZHToZlepHinc_narrow_M%s'%m,'Ntuples2017/XZH/ZprimeToZHToZlepHinc_narrow_M%s'%m,'Ntuples2018/XZH/ZprimeToZHToZlepHinc_narrow_M%s'%m]
                    elif signal_samples == 'ZinvHincVBF':
                        file_list = ['Ntuples2016/XZHVBF/Zprime_VBF_Zh_Zinvhinc_narrow_M-%s'%m,'Ntuples2017/XZHVBF/Zprime_VBF_Zh_Zinvhinc_narrow_M-%s'%m,'Ntuples2018/XZHVBF/Zprime_VBF_Zh_Zinvhinc_narrow_M-%s'%m]
                    elif signal_samples == 'ZlepHincVBF':
                        file_list = ['Ntuples2016/XZHVBF/Zprime_VBF_Zh_Zlephinc_narrow_M-%s'%m,'Ntuples2017/XZHVBF/Zprime_VBF_Zh_Zlephinc_narrow_M-%s'%m,'Ntuples2018/XZHVBF/Zprime_VBF_Zh_Zlephinc_narrow_M-%s'%m]
                    #if not 'VBF' in channel:
                    #    signMass = "XZH_M%d" % m
                    #else:
                    #    signMass = "XZHVBF_M%d" % m
                    ngenSign[m] = 0.
                    nevtSign[m] = 0.
                    #for j, ss in enumerate(sample[signMass]['files']):
                    for j, ss in enumerate(file_list):
                        sfile = TFile(NTUPLEDIR + ss + ".root", "READ")
                        if not sfile.Get("Events")==None:
                            ngenSign[m] += sfile.Get("Events").GetEntries()
                            # From trees
                            treeSign[m] = sfile.Get("tree")
                            nevtSign[m] += treeSign[m].GetEntries(selection[channel] + selection['SR'])
                        else:
                            ngenSign[m] = -1
                            print "Failed reading file", NTUPLEDIR + ss + ".root"
                        sfile.Close()
                    if nevtSign[m] == 0 or ngenSign[m] < 0: continue
                    # Gen Br
                    #print "m:",m
                    #print "nevtSign:",nevtSign[m]
                    #print "ngenSign:",ngenSign[m]
                    neff += nevtSign[m]/ngenSign[m]
                if 'ln' in sign or 'll' in sign: neff *= 1.5
                n = eff[sign].GetN()
                eff[sign].SetPoint(n, m, neff)
                eff[sign].SetPointError(n, 0, 0)

        n = 0. #max([eff[x].GetN() for x in channels])
        maxEff = 0.
        #sign_list = ['XZHeebb','XZHmmbb','XZHnnbb', 'XZHee0b', 'XZHmm0b', 'XZHnn0b','XZHVBFeebbVBF', 'XZHVBFmmbbVBF', 'XZHVBFnnbbVBF','XZHVBFee0bVBF', 'XZHVBFmm0bVBF', 'XZHVBFnn0bVBF']
        leg = TLegend(0.15, 0.15, 0.95, 0.35)
        #leg = TLegend(0.15, 0.7, 0.95, 0.8)
        leg.SetBorderSize(0)
        leg.SetFillStyle(0) #1001
        leg.SetFillColor(0)
        for sign in sign_list:
            #if eff[sign].GetN() > 0:
            leg.AddEntry(eff[sign], labels[sign], "pl")
            n += 1
        leg.SetNColumns(int(n/3))
        leg.SetY1(leg.GetY2()-n*0.045/leg.GetNColumns())
    
        n_error = max([eff[x].GetN() for x in sign_list])
    
        # Total efficiency
        eff["sum"] = TGraphErrors(n_error)
        eff["sum"].SetMarkerStyle(24)
        eff["sum"].SetMarkerColor(1)
        eff["sum"].SetLineWidth(2)
        for i in range(n_error):
            tot, mass = 0., 0.
            for sign in sign_list:
                if eff[sign].GetN() > i:
                    tot += eff[sign].GetY()[i]
                    mass = eff[sign].GetX()[i]
            if tot > maxEff: maxEff = tot
            eff["sum"].SetPoint(i, mass, tot)

        #legS = TLegend(0.55, 0.85-0.045, 0.95, 0.85)
        legS = TLegend(0.55, 0.35-0.045, 0.95, 0.35)
        legS.SetBorderSize(0)
        legS.SetFillStyle(0) #1001
        legS.SetFillColor(0)
        legS.AddEntry(eff['sum'], "%s Total efficiency"%signal_samples, "pl")

        c1 = TCanvas("c1", "Signal Efficiency", 1200, 800)
        c1.cd(1)
        c1.GetPad(0).SetTicks(1, 1)
        c1.SetLogy()
        first = sign_list[0]
        #if eff['XZHeebb'].GetN()!=0:
        #    first = 'XZHeebb'
        #else:
        #    first = 'XZHnnbb'
        eff[first].Draw("APL")
        for sign, channels in signals.iteritems():
            eff[sign].Draw("APL" if i==0 else "SAME, PL")
        eff["sum"].Draw("SAME, PL")
        leg.Draw()
        legS.Draw()

        setHistStyle(eff[first], 1.1)
        eff[first].SetTitle(";m_{X} (GeV);Acceptance #times efficiency")
        eff[first].SetMinimum(0.)
        eff[first].SetMaximum(max(1., maxEff*1.5)) #0.65
        eff[first].GetXaxis().SetTitleSize(0.045)
        eff[first].GetYaxis().SetTitleSize(0.045)
        eff[first].GetXaxis().SetLabelSize(0.045)
        eff[first].GetYaxis().SetLabelSize(0.045)
        eff[first].GetYaxis().SetTitleOffset(1.1)
        eff[first].GetXaxis().SetTitleOffset(1.05)
        eff[first].GetXaxis().SetRangeUser(750,5500)
        eff[first].GetYaxis().SetRangeUser(0., 0.4)
        drawCMS(-1,YEAR, "Simulation")
        """
        latex = TLatex()
        latex.SetNDC()
        latex.SetTextSize(0.05)
        latex.SetTextColor(1)
        latex.SetTextFont(42)
        latex.SetTextAlign(13)
        latex.DrawLatex(0.83, 0.99, "(13 TeV)")
        latex.SetTextFont(62)
        latex.SetTextSize(0.06)
        latex.DrawLatex(0.15, 0.90, "CMS")
        latex.SetTextSize(0.05)
        latex.SetTextFont(52)
        """
        #c1.Print("plotsSignal/Efficiency/Efficiency.pdf")
        #c1.Print("plotsSignal/Efficiency/Efficiency.png")
        c1.Print("plotsSignal/Efficiency/%s_Efficiency.pdf"%signal_samples)
        c1.Print("plotsSignal/Efficiency/%s_Efficiency.png"%signal_samples)
Beispiel #3
0
def MakeLegend(can,
               x1=.8,
               y1=.8,
               x2=.9,
               y2=.9,
               textsize=18,
               ncolumns=1,
               totalentries=0,
               option='f',
               skip=[]):
    from ROOT import TLegend, TH1, gStyle, TGraph
    if can.GetPrimitive('pad_top'):
        MakeLegend(can.GetPrimitive('pad_top'),
                   x1,
                   y1,
                   x2,
                   y2,
                   textsize,
                   ncolumns,
                   totalentries,
                   skip=skip)
        return
    if CanvasEmpty(can):
        print 'Error: trying to make legend from canvas with 0 plots. Will do nothing.'
        return
    #
    # if a previous version exists from this function, delete it
    #
    if can.GetPrimitive('legend'):
        can.GetPrimitive('legend').Delete()
    leg = TLegend(x1, y1, x2, y2)
    leg.SetName('legend')
    tobject_collector.append(leg)
    leg.SetTextFont(43)
    leg.SetTextSize(textsize)
    leg.SetTextFont(43)
    leg.SetBorderSize(0)
    leg.SetFillStyle(0)
    leg.SetNColumns(ncolumns)
    #
    # Add by TH1 GetTitle()
    #
    the_primitives = can.GetListOfPrimitives()
    if can.GetPrimitive('pad_top'):
        the_primitives = can.GetPrimitive('pad_top').GetListOfPrimitives()
    if can.GetPrimitive('stack'):
        the_stack = list(reversed(list(can.GetPrimitive('stack').GetHists())))
        the_primitives = the_stack + list(the_primitives)

    if type(option) == type(''):
        option = [option] * 100

    total = 0
    for i in the_primitives:
        if i.GetName() == 'stack': continue
        drawopt = i.GetDrawOption()
        if issubclass(type(i), TH1) or issubclass(type(i), TGraph):
            if i.GetTitle() in skip:
                continue
            leg.AddEntry(i, i.GetTitle(), option[total])  # plef
            total += 1

    #
    # Add empty entries to ensure a standard layout
    #
    for i in range(100):
        if totalentries == 0: break
        if total >= totalentries: break
        leg.AddEntry(None, '', '')
        total += 1

    # recipe for making roughly square boxes
    h = leg.GetY2() - leg.GetY1()
    w = leg.GetX2() - leg.GetX1()
    leg.SetMargin(leg.GetNColumns() * h / float(leg.GetNRows() * w))
    can.cd()
    if can.GetPrimitive('pad_top'):
        can.GetPrimitive('pad_top').cd()
    leg.Draw()
    can.Modified()
    can.Update()
    return