def getPlots(args): tag = args.tag savename = args.savetag odir = 'plots/%s/'%tag os.system('mkdir -p %s'%odir) pwd = os.getcwd() # open hists hists_unmapped = load('%s.coffea'%args.hists) os.chdir(odir) # map to hists hists_mapped = {} for key, val in hists_unmapped.items(): if isinstance(val, hist.Hist): hists_mapped[key] = processmap.apply(val) # properties hist_name = args.hist vars_cut = {} if (len(args.sel)%3==0): for vi in range(int(len(args.sel)/3)): vars_cut[args.sel[vi*3]] = [float(args.sel[vi*3+1]), float(args.sel[vi*3+2])] h = hists_mapped[hist_name] drawSolo(h,args.hist,vars_cut,savename) os.chdir(pwd)
def getPlots(args): lumifb = float(args.lumi) tag = args.tag savename = args.savetag odir = 'plots/%s/' % tag os.system('mkdir -p %s' % odir) pwd = os.getcwd() # open hists hists_unmapped = load('%s.coffea' % args.hists) os.chdir(odir) # map to hists hists_mapped = {} #print(hists_unmapped,hists_mapped) for key, val in hists_unmapped.items(): if isinstance(val, hist.Hist): print(key, val) hists_mapped[key] = processmap.apply(val) # normalize to lumi print('normalizing mc to %.1f fb^-1 lumi') #print( for h in hists_mapped.values(): h.scale( { p: lumifb for p in h.identifiers('process') if 'JetHT' not in str(p) and 'SingleMuon' not in str(p) }, axis="process") h.scale({'tt': 0.8}, axis="process") h.scale({'tttoleptonic': 0.8}, axis="process") h.scale({'tttosemileptonic': 0.8}, axis="process") h.scale({'tttohadronic': 0.8}, axis="process") # properties hist_name = args.hist var_name = args.var var_label = r"$%s$" % args.varlabel vars_cut = {} if (len(args.sel) % 3 == 0): for vi in range(int(len(args.sel) / 3)): vars_cut[args.sel[vi * 3]] = [ float(args.sel[vi * 3 + 1]), float(args.sel[vi * 3 + 2]) ] h = hists_mapped[hist_name] save(h, 'test.coffea') drawSolo(h, args.hist, var_name, var_label, args.title, lumifb, vars_cut, args.regions, savename, args.plotData, args.plotDensity) os.chdir(pwd)
def getPlots(args): print(args.lumi) lumifb = float(args.lumi) tag = args.tag savename = args.savetag odir = 'plots/%s/' % tag os.system('mkdir -p %s' % odir) pwd = os.getcwd() # open hists hists_unmapped = load('%s.coffea' % args.hists) os.chdir(odir) # map to hists hists_mapped = {} for key, val in hists_unmapped.items(): if isinstance(val, hist.Hist): hists_mapped[key] = processmap.apply(val) # normalize to lumi for h in hists_mapped.values(): h.scale({p: lumifb for p in h.identifiers('process')}, axis="process") print(hists_mapped) # properties hist_name = args.hist var_name = args.var var_label = r"$%s$" % args.varlabel vars_cut = {} #print(args.sel) if (len(args.sel) % 3 == 0): for vi in range(int(len(args.sel) / 3)): vars_cut[args.sel[vi * 3]] = [ float(args.sel[vi * 3 + 1]), float(args.sel[vi * 3 + 2]) ] print(vars_cut) h = hists_mapped[hist_name] print(h) drawSolo(h, args.hist, var_name, var_label, args.title, lumifb, vars_cut, args.regions, savename) os.chdir(pwd)
def getPlots(args): lumifb = args.lumi tag = args.tag odir = 'plots/%s/' % tag os.system('mkdir -p %s' % odir) pwd = os.getcwd() # open hists hists_unmapped = load('%s.coffea' % args.hists) os.chdir(odir) # map to hists hists_mapped = {} for key, val in hists_unmapped.items(): if isinstance(val, hist.Hist): hists_mapped[key] = processmap.apply(val) print(hists_mapped) # normalize to lumi for h in hists_mapped.values(): h.scale({p: lumifb for p in h.identifiers('process')}, axis="process") # properties #hist_name = 'jet_museljet' hist_name = 'jet_museljet' var_name = 'jetMu_pt' var_label = r'Jet p$_{T}$ (GeV)' vars_cut = { 'jetMu_lsf3': [0.78, 1], 'jetMu_msd': [20, 200], } h = hists_mapped[hist_name] drawStack(h, var_name, var_label, lumifb, vars_cut) os.chdir(pwd)
import os import uproot import numpy as np from coffea import hist from coffea.util import load, save import processmap hists_unmapped = load('hists_Hbb_create_2017.coffea') hists = {} for key, val in hists_unmapped.items(): if isinstance(val, hist.Hist): hists[key] = processmap.apply(val) if os.path.exists("templates.root"): os.remove("templates.root") fout = uproot.create("templates.root") nodata = re.compile("(?!data_obs)") h = hists['templates_signalregion'][nodata] lumi = 41.1 h.scale({p: lumi for p in h[nodata].identifiers('process')}, axis="process") for proc in h.identifiers('process'): for i, ptbin in enumerate(h.identifiers('AK8Puppijet0_pt')): for syst in h.identifiers('systematic'): mproj = (slice(None), 'all')
def drawCutflow(h, plottitle, lumifb, regionsel): cutlist = [] for c in h[list(h.keys())[0]]: cutlist.append(c) cutnames = [] newlinei = 8 for c in cutlist: if (len(c) < newlinei): cutnames.append(c) else: isCut = False cuti = getindices(c) if not cuti: cutnames.append(c) isCut = True else: for ic in cuti: if (ic >= newlinei): if (c[ic] in special_char_list): cutnames.append(c[:ic] + "\n" + c[ic + 1:]) else: cutnames.append(c[:ic] + "\n" + c[ic:]) isCut = True break if not isCut: cutnames.append(c) print(cutlist) print(cutnames) cuthist_raw = hist.Hist( 'Events', hist.Cat('dataset', 'Dataset'), hist.Bin('cut', 'Cut', len(cutlist), -0.5, float(len(cutlist)) - 0.5), ) for s in h: for ic, c in enumerate(cutlist): cuthist_raw.fill( dataset=s, cut=ic, weight=h[s][c], ) x = processmap.apply(cuthist_raw) for ih, hkey in enumerate(x.identifiers('process')): x.identifiers('process')[ih].label = process_latex[hkey.name] mc_processes = [ 'zqq', 'wqq', 'qcd', 'tt', 'st', 'wlnu', ] data_processes = [ 'SingleMuon', 'JetHT', ] mc = x.remove(data_processes, 'process') data = x.remove( mc_processes + ['SingleMuon'] if 'signal' in regionsel else mc_processes + ['JetHT'], 'process') mc.scale({p: lumifb for p in mc.identifiers('process')}, axis="process") mc.axis('process').sorting = 'integral' fig, ax = plt.subplots() hist.plot1d( mc, overlay='process', ax=ax, clear=False, stack=True, fill_opts=fill_opts, error_opts=err_opts, ) hist.plot1d(data, ax=ax, clear=False, line_opts=line_opts) all_bkg = 0 #for key,val in x[nosig].values().items(): # all_bkg+=val.sum() #x_nobkg = x[nobkg] #x_nobkg.scale(50) #all_sig = 0 #for key,val in x_nobkg.values().items(): # all_sig +=val.sum() #print('%.4f %.4f %.4f'%(all_bkg,all_sig,all_sig/math.sqrt(all_bkg))) #hist.plot1d(x_nobkg,ax=ax,overlay='process',clear=False,line_opts=line_opts) ax.autoscale(axis='x', tight=True) #ax.set_xlim(20, 200) ax.set_ylim(0, None) plt.xticks(range(len(cutnames)), cutnames, rotation=60) #ax.ticklabel_format(axis='x', style='sci') old_handles, old_labels = ax.get_legend_handles_labels() new_labels = [] for xl in old_labels: if ('ggH' in xl): xl = xl + " (x 50)" new_labels.append(xl) leg = ax.legend(handles=old_handles, labels=new_labels, title=r'$%s$' % plottitle, frameon=True, framealpha=1.0, facecolor='white', loc='lower left') lumi = plt.text(1., 1., r"%.1f fb$^{-1}$ (13 TeV)" % lumifb, fontsize=16, horizontalalignment='right', verticalalignment='bottom', transform=ax.transAxes) cmstext = plt.text(0., 1., "CMS", fontsize=19, horizontalalignment='left', verticalalignment='bottom', transform=ax.transAxes, fontweight='bold') addtext = plt.text(0.085, 1., "Simulation Preliminary", fontsize=16, horizontalalignment='left', verticalalignment='bottom', transform=ax.transAxes, style='italic') #hep.cms.cmslabel(ax, data=False, paper=False, year='2017') #ax.semilogy() ax.set_yscale("log") minvals = [] for xd in x.values(): minvals.append(min(np.trim_zeros(x.values()[xd]))) decsplit = str(min(minvals)).split('.') if (int(decsplit[0]) == 0): logmin = 0.1**float( len(decsplit[1]) - len(decsplit[1].lstrip('0')) + 2) else: logmin = 10.**float(len(decsplit[0]) - 1) ax.set_ylim(logmin / 10., None) plt.minorticks_on() locmaj = mpltick.LogLocator(base=10.0, subs=(1.0, ), numticks=100) ax.yaxis.set_major_locator(locmaj) locmin = mpltick.LogLocator(base=10.0, subs=np.arange(2, 10) * .1, numticks=100) ax.yaxis.set_minor_locator(locmin) ax.yaxis.set_minor_formatter(mpltick.NullFormatter()) fig.savefig("cutflow_%s_lumi%i_logy.pdf" % (regionsel, lumifb)) #---------------------------- fig, ax = plt.subplots() x.scale( {(str(xd).split('\''))[1]: 1. / x.values()[xd][0] for xd in x.values()}, 'process') hist.plot1d( x, overlay='process', ax=ax, clear=False, stack=False, #fill_opts=fill_opts, #error_opts=err_opts, line_opts=line_opts_nocolor) ax.autoscale(axis='x', tight=True) #ax.set_xlim(20, 200) ax.set_ylim(0, None) plt.xticks(range(len(cutnames)), cutnames, rotation=60) #ax.ticklabel_format(axis='x', style='sci') old_handles, old_labels = ax.get_legend_handles_labels() new_labels = [] for xl in old_labels: new_labels.append(xl) leg = ax.legend(handles=old_handles, labels=new_labels, title=r'$%s$' % plottitle, frameon=True, framealpha=1.0, facecolor='white', loc='lower left') lumi = plt.text(1., 1., r"%.1f fb$^{-1}$ (13 TeV)" % lumifb, fontsize=16, horizontalalignment='right', verticalalignment='bottom', transform=ax.transAxes) cmstext = plt.text(0., 1., "CMS", fontsize=20, horizontalalignment='left', verticalalignment='bottom', transform=ax.transAxes, fontweight='bold') addtext = plt.text(0.085, 1., "Simulation Preliminary", fontsize=16, horizontalalignment='left', verticalalignment='bottom', transform=ax.transAxes, style='italic') #hep.cms.cmslabel(ax, data=False, paper=False, year='2017') ax.semilogy() minvals = [] for xd in x.values(): minvals.append(min(np.trim_zeros(x.values()[xd]))) ax.set_ylim(10.**float(math.floor(math.log10(min(minvals))))) ylo, yhi = ax.get_ylim() nticksy = int(math.floor(math.log10(yhi)) - math.floor(math.log10(ylo))) + 2 plt.minorticks_on() locmaj = mpltick.LogLocator(base=10.0, subs=(1.0, ), numticks=100) ax.yaxis.set_major_locator(locmaj) locmin = mpltick.LogLocator(base=10.0, subs=np.arange(2, 10) * .1, numticks=100) ax.yaxis.set_minor_locator(locmin) ax.yaxis.set_minor_formatter(mpltick.NullFormatter()) fig.savefig("cuteff_%s_lumi%i_logy.pdf" % (regionsel, lumifb))
def getRoc(args): # vars vars = args.vars.split(',') # open hists hists_unmapped = load('%s.coffea' % args.hists) print(hists_unmapped) # map to hists hists_mapped = {} for key, val in hists_unmapped.items(): if isinstance(val, hist.Hist): hists_mapped[key] = processmap.apply(val) print('hists mapped ', hists_mapped) # build roc for all vars vals = {} rocs = {} labels = {} for lep in ['ele', 'mu']: for jet in ['jet0', 'jet1']: vals['%s_%s' % (lep, jet)] = {} rocs['%s_%s' % (lep, jet)] = {} for var in vars: for lep in ['ele', 'mu']: for jet in ['jet0', 'jet1']: print('getting roc for ', var, lep, jet) hist_name = 'roc_%ssel%s' % (lep, jet) if 'lsf' in var: var_name = jet + '_' + var var_cut_dir = -1 else: var_name = lep + '0_' + var var_cut_dir = 1 # get hist h = hists_mapped[hist_name] print(h) print([ ax for ax in h.axes() if ax.name not in {'process', var_name} ]) x = h.sum(*[ ax for ax in h.axes() if ax.name not in {'process', var_name} ]) bkg = 'qcd' sig = 'h125' #vals['%s_%s'%(lep,jet)][var], rocs['%s_%s'%(lep,jet)][var] = roc(x, bkg, sig, direction=var_cut_dir) labels[var] = var # plot variable fig, ax = plt.subplots(1, 1, figsize=(8, 8)) print(x) hist.plot1d(x, ax=ax, overlay='process', clear=False, density=True) fig.savefig("plots/rocs/lsf_%s_%s_%s.png" % (var, lep, jet)) return vals, rocs, labels
def getPlots(args): odir = 'plots/trigger/' os.system('mkdir -p %s' % odir) pwd = os.getcwd() # open hists hists_unmapped = load('%s.coffea' % args.hists) os.chdir(odir) print(hists_unmapped) # map to hists hists_mapped = {} for key, val in hists_unmapped.items(): if isinstance(val, hist.Hist): hists_mapped[key] = processmap.apply(val) print(hists_mapped) # properties: denom and num trigger_plots = { 'had_hadtrig': { 'vars': ['genH_pt', 'jet0_pt'], 'denom': 'hadseljet0Trignone', 'num': 'hadseljet0Trighad', 'title': 'HLT_PFHT1050 || HLT_AK8*_TrimMass50' }, 'ele_hadtrig': { 'vars': ['genH_pt', 'genEle_pt'], 'denom': 'eleseljet0Trignone', 'num': 'eleseljet0Trighad', 'title': 'HLT_PFHT1050 || HLT_AK8*_TrimMass50' }, 'ele_eletrig': { 'vars': ['genH_pt', 'genEle_pt'], 'denom': 'eleseljet0Trignone', 'num': 'eleseljet0Trigele', 'title': 'HLT_Ele115_CaloIdVT_GsfTrkIdT and others' }, 'ele_vveletrig': { 'vars': ['genH_pt', 'genEle_pt'], 'denom': 'eleseljet0Trignone', 'num': 'eleseljet0Trigvvlele', 'title': 'HLT_Ele15_IsoVVVL_PFHT450', }, 'mu_hadtrig': { 'vars': ['genH_pt', 'genMu_pt'], 'denom': 'museljet0Trignone', 'num': 'museljet0Trighad', 'title': 'HLT_PFHT1050 || HLT_AK8*_TrimMass50', }, 'mu_mutrig': { 'vars': ['genH_pt', 'genMu_pt'], 'denom': 'museljet0Trignone', 'num': 'museljet0Trigmu', 'title': 'HLT_Mu50' }, 'mu_vvmutrig': { 'vars': ['genH_pt', 'genMu_pt'], 'denom': 'museljet0Trignone', 'num': 'museljet0Trigvvlmu', 'title': 'HLT_Mu15_IsoVVVL_PFHT600' }, 'mu_mettrig': { 'vars': ['genH_pt', 'MET_pt'], 'denom': 'museljet0Trignone', 'num': 'museljet0Trigmet', 'title': 'HLT_PFMETNoMu110_PFMHTNoMu110_IDTight' }, 'mu_btagtrig': { 'vars': ['genH_pt', 'genMu_pt'], 'denom': 'museljet0Trignone', 'num': 'museljet0Trigbtagmu', 'title': 'HLT_BTagMu_AK8Jet300_Mu5' }, } for key, item in trigger_plots.items(): h_num = hists_mapped[item['num']] h_denom = hists_mapped[item['denom']] for var in item['vars']: drawEfficiency(h_num, h_denom, var, fig_lab=key + '_' + var, title=item['title']) os.chdir(pwd)