Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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')
Exemplo n.º 6
0
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))
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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)