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()
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)
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