示例#1
0
def main():

    indir = "input/2019-09-06_hem/"

    acc = acc_from_dir(indir)

    # for year in [2018]:
    #     data = re.compile(f'EGamma_{year}')
    #     mc = re.compile(f'(EW.*|TTJets.*|ZZ.*|ST.*|QCD_HT.*|WW.*|WZ.*|.*DYJetsToLL_M-50_HT_MLM.*|WJet.*HT.*){year}')

    #     for region in ['cr_1e_j','cr_1e_j_nohem', 'cr_2e_j','cr_1e_j_nohem']:
    #         for distribution in ['recoil','ak4_phi','electron_phi','ak4_pt0']:
    #             make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, outdir=f'./output/{os.path.basename(indir)}')

    for year in [2018]:
        data = re.compile(f'MET_{year}')
        mc = re.compile(
            f'(EW.*|TTJets.*|ZZ.*|ST.*|QCD_HT.*|WW.*|WZ.*|.*DYJetsToLL_M-50_HT_MLM.*|WJet.*HT.*){year}'
        )
        for region in ['cr_1m_j', 'cr_1m_j_nohem']:
            for distribution in ['ak4_phi', 'recoil', 'ak4_pt0']:
                make_plot(acc,
                          region=region,
                          distribution=distribution,
                          year=year,
                          data=data,
                          mc=mc,
                          outdir=f'./output/{os.path.basename(indir)}')
示例#2
0
def data_mc_after_kfac():
    indir = "input/21Aug_newsf"

    acc = acc_from_dir(indir)
    outdir = f'./output/{os.path.basename(indir)}'
    for year in [2017, 2018]:
        data = re.compile(f'MET_{year}')
        mc = re.compile(
            f'(EW.*|TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DYJetsToLL_M-50_HT_MLM.*){year}'
        )
        region = 'cr_2m_j'
        for distribution in ['recoil', 'ak4_pt0']:
            make_plot(acc,
                      region=region,
                      distribution=distribution,
                      year=year,
                      data=data,
                      mc=mc,
                      ylim=(1e-3, 1e3),
                      outdir=outdir)

        data = re.compile(f'MET_{year}')
        mc = re.compile(
            f'(TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DYJetsToLL_M-50_HT_MLM.*|W.*HT.*).*{year}'
        )
        region = 'cr_1m_j'
        for distribution in ['recoil', 'ak4_pt0']:
            make_plot(acc,
                      region=region,
                      distribution=distribution,
                      year=year,
                      data=data,
                      mc=mc,
                      ylim=(1e-3, 1e5),
                      outdir=outdir)
示例#3
0
def main():
    args = parse_commandline()

    klepto = True
    if klepto:
        acc = dir_archive(args.inpath, serialized=True, compression=0, memsize=1e3)
        acc.load('recoil')
        acc.load('mjj')
        acc.load('sumw')
        acc.load('sumw_pileup')
        acc.load('nevents')
    else:
        acc = acc_from_dir(args.inpath)

    args.outdir = pjoin('./output/',list(filter(lambda x:x,args.inpath.split('/')))[-1])
    for channel in args.channel.split(','):
        print(channel)
        if channel == 'monojet':
            from legacy_monojet import legacy_limit_input_monojet
            legacy_limit_input_monojet(acc, args)
        elif channel == 'monov':
            from legacy_monov import legacy_limit_input_monov
            legacy_limit_input_monov(acc, args)
        elif channel == 'vbfhinv':
            from legacy_vbf import legacy_limit_input_vbf
            legacy_limit_input_vbf(acc, outdir=args.outdir, unblind=args.unblind)
示例#4
0
def main():
    # indir = "/home/albert/repos/bucoffea/bucoffea/plot/input/eff/test"

    tag = '120pfht_hltmu'
    indir = f"/home/albert/repos/bucoffea/bucoffea/plot/input/eff/{tag}"
    acc = acc_from_dir(indir)

    for year in [2017, 2018]:
        region = '1m'
        for dataset in ["WJetsToLNu-MLM", "SingleMuon"]:
            plot_recoil(acc,region,dataset=dataset,year=year, tag=tag)
        region = '2m'
        for dataset in ["DYNJetsToLL_M-50-MLM", "SingleMuon"]:
            plot_recoil(acc,region,dataset=dataset,year=year, tag=tag)
        region = '1m_hlt'
        for dataset in ["WJetsToLNu-MLM", "SingleMuon"]:
            plot_recoil(acc,region,dataset=dataset,year=year, tag=tag)
        region = '2m_hlt'
        for dataset in ["DYNJetsToLL_M-50-MLM", "SingleMuon"]:
            plot_recoil(acc,region,dataset=dataset,year=year, tag=tag)
        region = '1e'
        for dataset in ["WJetsToLNu-MLM", "EGamma"]:
            plot_recoil(acc,region,dataset=dataset,year=year, tag=tag, distribution='met')
        region = '2e'
        for dataset in ["DYNJetsToLL_M-50-MLM", "EGamma"]:
            plot_recoil(acc,region,dataset=dataset,year=year, tag=tag, distribution='met')

    region_comparison_plot(tag)
    sf_comparison_plot(tag)
示例#5
0
def main():
    args = parse_commandline()

    klepto = True
    if klepto:
        acc = dir_archive(args.inpath,
                          serialized=True,
                          compression=0,
                          memsize=1e3)
        acc.load('recoil')
        acc.load('mjj')
        acc.load('sumw')
        acc.load('sumw_pileup')
        acc.load('nevents')
    else:
        acc = acc_from_dir(args.inpath)

    outdir = pjoin('./output/', os.path.basename(args.inpath))

    if args.channel == 'monojet':
        from legacy_monojet import legacy_limit_input_monojet
        legacy_limit_input_monojet(acc, outdir=outdir)
    elif args.channel == 'monov':
        from legacy_monov import legacy_limit_input_monov
        legacy_limit_input_monov(acc, outdir=outdir)
    elif args.channel == 'vbfhinv':
        from legacy_vbf import legacy_limit_input_vbf
        legacy_limit_input_vbf(acc, outdir=outdir)
示例#6
0
def main():
    acc = acc_from_dir("./input/das_lhevpt_v3")
    outputrootfile = uproot.recreate(f'2017_gen_v_pt_stat1_qcd_sf.root')
    plot_lhe_v_pt(acc,
                  tag='wjet_dilep',
                  regex='W.*',
                  pttype='dilepton',
                  outputrootfile=outputrootfile)
    plot_lhe_v_pt(acc,
                  tag='dy_dilep',
                  regex='.*DY.*',
                  pttype='dilepton',
                  outputrootfile=outputrootfile)

    outputrootfile = uproot.recreate(f'2017_gen_v_pt_lhe_qcd_sf.root')
    plot_lhe_v_pt(acc,
                  tag='wjet_nano',
                  regex='W.*',
                  pttype='nano',
                  outputrootfile=outputrootfile)
    plot_lhe_v_pt(acc,
                  tag='dy_nano',
                  regex='.*DY.*',
                  pttype='nano',
                  outputrootfile=outputrootfile)
示例#7
0
def ttbarcheck():
    indir = "input/21Aug_newsf"

    acc = acc_from_dir(indir)
    outdir = f'./output/{os.path.basename(indir)}/ttbar/fxfx_vs_mlm'
    for year in [2017, 2018]:
        data = re.compile(f'TTJets.*FXFX.*{year}')
        mc = re.compile(f'TTJets.*MLM.*{year}')
        region = 'cr_2m_j'
        for distribution in ['recoil', 'ak4_pt0']:
            make_plot(acc,
                      region=region,
                      distribution=distribution,
                      year=year,
                      data=data,
                      mc=mc,
                      ylim=(1e-3, 1e3),
                      outdir=outdir)

    outdir = f'./output/{os.path.basename(indir)}/ttbar/fxfx_vs_pow'
    for year in [2017, 2018]:
        data = re.compile(f'TTJets.*FXFX.*{year}')
        mc = re.compile(f'TT.*pow.*{year}')
        region = 'cr_2m_j'
        for distribution in ['recoil', 'ak4_pt0']:
            make_plot(acc,
                      region=region,
                      distribution=distribution,
                      year=year,
                      data=data,
                      mc=mc,
                      ylim=(1e-3, 1e3),
                      outdir=outdir)
示例#8
0
def main():
    infile = os.path.abspath('input/2019-09-09_gen_dilep_sf/')
    acc = acc_from_dir(infile)

    for year in [2017, 2018]:
        mc = {
            'cr_1m_j':
            re.compile(
                f'(TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DYJetsToLL_M-50_HT_MLM.*|W.*HT.*).*{year}'
            ),
            'cr_1e_j':
            re.compile(
                f'(TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DYJetsToLL_M-50_HT_MLM.*|W.*HT.*).*{year}'
            ),
            'cr_2m_j':
            re.compile(
                f'(EW.*|TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DYJetsToLL_M-50_HT_MLM.*).*{year}'
            ),
            'cr_2e_j':
            re.compile(
                f'(EW.*|TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DYJetsToLL_M-50_HT_MLM.*).*{year}'
            ),
            'cr_g_j':
            re.compile(f'(GJets.*|QCD_HT.*|W.*HT.*).*{year}'),
        }
        cr_ratio_plot(acc,
                      year=year,
                      tag='losf',
                      outdir=f'./output/{os.path.basename(infile)}',
                      mc=mc)

    for year in [2017, 2018]:
        mc = {
            'cr_1m_j':
            re.compile(
                f'(TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DY.*FXFX.*|W.*FXFX.*).*{year}'
            ),
            'cr_1e_j':
            re.compile(
                f'(TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DY.*FXFX.*|W.*FXFX.*).*{year}'
            ),
            'cr_2m_j':
            re.compile(
                f'(EW.*|TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DY.*FXFX.*).*{year}'
            ),
            'cr_2e_j':
            re.compile(
                f'(EW.*|TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DY.*FXFX.*).*{year}'
            ),
            'cr_g_j':
            re.compile(f'(GJets.*|QCD_HT.*|W.*FXFX.*).*{year}'),
        }
        cr_ratio_plot(acc,
                      year=year,
                      tag='nlo',
                      outdir=f'./output/{os.path.basename(infile)}',
                      mc=mc)
def main():
    acc = acc_from_dir("./input/")
    # plot_ht_stitching(acc, tag='dy', regex='DY.*HT(?!(.*new.*))')
    # acc = acc_from_dir("./input/wjet")
    plot_ht_stitching(acc, tag='wjet', regex='W.*HT(?!(.*new.*))')
    # acc = acc_from_dir("./input/znunu")
    plot_ht_stitching(acc, tag='znunu', regex='ZJets.*NuNu.*HT(?!(.*new.*))')
    # acc = acc_from_dir("./input/gjets")
    plot_ht_stitching(acc, tag='gjets', regex='GJets.*HT(?!(.*new.*))')
    plot_ht_stitching(acc, tag='qcd', regex='QCD.*HT(?!(.*new.*))')
示例#10
0
def cr_ratio():
        indir=os.path.abspath('input/2019-09-09_gen_dilep_sf/')
        acc = acc_from_dir(indir)
        

        
        for year in [2017,2018]:
            data = {
                'cr_1m_j' : f'MET_{year}',
                'cr_2m_j' : f'MET_{year}',
                'cr_1e_j' : f'EGamma_{year}',
                'cr_2e_j' : f'EGamma_{year}',
                'cr_g_j' : f'EGamma_{year}',
            }
            mc_lo = {
                'cr_1m_j' : re.compile(f'(TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DYJetsToLL_M-50_HT_MLM.*|W.*HT.*).*{year}'),
                'cr_1e_j' : re.compile(f'(TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DYJetsToLL_M-50_HT_MLM.*|W.*HT.*).*{year}'),
                'cr_2m_j' : re.compile(f'(EW.*|TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DYJetsToLL_M-50_HT_MLM.*).*{year}'),
                'cr_2e_j' : re.compile(f'(EW.*|TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DYJetsToLL_M-50_HT_MLM.*).*{year}'),
                'cr_g_j' : re.compile(f'(GJets.*|QCD_HT.*|W.*HT.*).*{year}'),
            }
            mc_nlo = {
                    'cr_1m_j' : re.compile(f'(TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DY.*FXFX.*|W.*FXFX.*).*{year}'),
                    'cr_1e_j' : re.compile(f'(TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DY.*FXFX.*|W.*FXFX.*).*{year}'),
                    'cr_2m_j' : re.compile(f'(EW.*|TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DY.*FXFX.*).*{year}'),
                    'cr_2e_j' : re.compile(f'(EW.*|TTJets.*FXFX.*|Diboson.*|ST.*|QCD_HT.*|.*DY.*FXFX.*).*{year}'),
                    'cr_g_j' : re.compile(f'(GJets.*|QCD_HT.*|W.*FXFX.*).*{year}'),
            }
            outdir = f'./output/{os.path.basename(indir)}/ratios'
            cr_ratio_plot(acc, year=year,tag='losf',outdir=outdir, mc=mc_lo)
            cr_ratio_plot(acc, year=year,tag='nlo',outdir=outdir, mc=mc_nlo)


            for region in mc_lo.keys():
                outdir = f'./output/{os.path.basename(indir)}/{region}'
                plotset = plot_settings[region]
                for distribution in plotset.keys():
                    make_plot(acc, 
                            region=region,
                            distribution=distribution, 
                            year=year, 
                            data=data[region], 
                            mc=mc_lo[region], 
                            ylim=plot_settings['ylim'], 
                            tag = 'losf',
                            outdir=f'./output/{os.path.basename(indir)}/{region}')
                    make_plot(acc, 
                            region=region,
                            distribution=distribution, 
                            year=year, 
                            data=data[region], 
                            mc=mc_nlo[region], 
                            ylim=plot_settings['ylim'], 
                            tag = 'nlo',
                            outdir=f'./output/{os.path.basename(indir)}/{region}')
示例#11
0
def main():

    # indir = "../input/21Aug19_v4_pdfwgt"

    # acc = acc_from_dir(indir)

    # for year in [2017]:
    #     data = re.compile(f'MET_{year}')
    #     mc = re.compile(f'(EW.*|TTJets.*|ZZ.*|ST.*|QCD_HT.*|WW.*|WZ.*|.*DYJetsToLL_M-50_HT_MLM.*){year}')
    #     region='cr_2m_j'
    #     for distribution in ['recoil']:
    #         make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, ylim=(1e-3,1e3), outdir=f'./output/{os.path.basename(indir)}')

    indir = "../../input/21Aug19_v2_newpu"

    acc = acc_from_dir(indir)

    for year in [2017]:
        data = re.compile(f'MET_{year}')
        mc = re.compile(
            f'(EW.*|TTJets.*|ZZ.*|ST.*|QCD_HT.*|WW.*|WZ.*|.*DYJetsToLL_M-50_HT_MLM.*){year}'
        )
        region = 'cr_2m_j'
        for distribution in ['recoil', 'ak4_pt0']:
            make_plot(acc,
                      region=region,
                      distribution=distribution,
                      year=year,
                      data=data,
                      mc=mc,
                      ylim=(1e-3, 1e3),
                      outdir=f'./output/{os.path.basename(indir)}')

    for year in [2017]:
        data = re.compile(f'MET_{year}')
        mc = re.compile(
            f'(EW.*|TTJets.*|ZZ.*|ST.*|QCD_HT.*|WW.*|WZ.*|.*DYJetsToLL_M-50_HT_MLM.*){year}'
        )
        region = 'cr_2m_j'
        for distribution in ['recoil', 'ak4_pt0']:
            make_plot(acc,
                      region=region,
                      distribution=distribution,
                      year=year,
                      data=data,
                      mc=mc,
                      ylim=(1e-3, 1e3),
                      outdir=f'./output/{os.path.basename(indir)}/ttbarcheck')
示例#12
0
def photon_triggers():
    tag = 'gamma'
    indir = f"/home/albert/repos/bucoffea/bucoffea/plot/input/gamma_alltrig"
    acc = acc_from_dir(indir)

    # All regions
    regions = []
    for k in acc['photon_pt0'].axis('region').identifiers():
        k = str(k)
        if not k.startswith('tr_g'):
            continue
        if 'pt_trig_cut' in k:
            continue
        regions.append(
            k.replace("tr_", "").replace("_num", "").replace("_den", ""))

    for year in [2017, 2018]:
        # for distribution in ['photon_pt0', 'recoil']:
        for region in set(regions):
            for dataset in ["GJets_HT_MLM", "JetHT"]:
                if 'photon_pt_' in region:
                    distribution = 'recoil_noweight'
                    axis_name = 'recoil'
                else:
                    distribution = 'photon_pt0'
                    axis_name = 'pt'

                for noscale in [False]:
                    if ('JetHT' in dataset) and noscale:
                        continue
                    plot_recoil(copy.deepcopy(acc),
                                region,
                                dataset=dataset,
                                year=year,
                                tag=tag,
                                distribution=distribution,
                                axis_name=axis_name,
                                noscale=noscale)

                    # plot_recoil(acc,region,dataset=dataset,year=year, tag=tag, distribution='recoil',axis_name='recoil')
    data_mc_comparison_plot(tag)
示例#13
0
def main():
    # The input is saved in individual *.coffea files
    # in the directory given here.
    indir = "./input/eff/gamma"

    # 'acc' is short for 'accumulator', which is the output
    # produced by a coffea processor. It behaves like a python dict,
    # so you can import it also in an interactive python shell to play with it
    # Note that 'acc_from_indir' uses caching, so subsequent readings will be much faster!
    acc = acc_from_dir(indir)

    # The make_plot function currently just makes a dimuon
    # mass plot for the dimuon control region.
    # TODO:
    #   * Make more flexible: More regions, more plots, etc
    #   * Selection of input processes is currently just hardcoded -> handle better!
    for year in [2017]:
        data = re.compile(f'SingleMuon_{year}')
        mc = re.compile(f'DY.*HT.*{year}')
        region = 'cr_2m_j'
        for distribution in ['recoil', 'dimuon_mass']:
            make_plot(copy.deepcopy(acc),
                      region=region,
                      distribution=distribution,
                      year=year,
                      data=data,
                      mc=mc)

    for year in [2017, 2018]:
        data = re.compile(f'SingleMuon_{year}')
        mc = re.compile(f'W.*HT.*{year}')
        region = 'cr_1m_j'
        for distribution in ['recoil']:
            make_plot(copy.deepcopy(acc),
                      region=region,
                      distribution=distribution,
                      year=year,
                      data=data,
                      mc=mc)
示例#14
0
def met_triggers_ht():
    tag = '120pfht_hltmu'
    indir = f"/home/albert/repos/bucoffea/bucoffea/plot/input/16Jul19_incomplete_v7"
    acc = acc_from_dir(indir)

    # for noscale in [False]:
    #     distribution = 'recoil_noweight'  if noscale else 'recoil'
    #     for year in [2017, 2018]:
    #         region = '1m'
    #         for dataset in ["WJetsToLNu_HT_MLM", "SingleMuon"]:
    #             if dataset=='SingleMuon' and noscale:
    #                 continue
    #             plot_recoil(acc,region,distribution=distribution,axis_name='recoil',dataset=dataset,year=year, tag=tag, noscale=noscale)
    #         region = '2m'
    #         for dataset in ["DYJetsToLL_M-50_HT_MLM", "SingleMuon"]:
    #             if dataset=='SingleMuon' and noscale:
    #                 continue
    #             plot_recoil(acc,region,distribution=distribution,axis_name='recoil',dataset=dataset,year=year, tag=tag, noscale=noscale)
    #         # region = '1m_hlt'
    #         # for dataset in ["WJetsToLNu_HT_MLM", "SingleMuon"]:
    #         #     plot_recoil(acc,region,dataset=dataset,year=year, tag=tag)
    #         region = '2m_hlt'
    #         for dataset in ["DYJetsToLL_M-50_HT_MLM", "SingleMuon"]:
    #             if dataset=='SingleMuon' and noscale:
    #                 continue
    #             plot_recoil(acc,region,distribution=distribution,axis_name='recoil',dataset=dataset,year=year, tag=tag, noscale=noscale)
    #         region = '1e'
    #         for dataset in ["WJetsToLNu_HT_MLM", "EGamma"]:
    #             plot_recoil(acc,region,dataset=dataset,year=year, tag=tag, distribution='met')
    #         # region = '2e'
    #         # for dataset in ["DYJetsToLL_M-50_HT_MLM", "EGamma"]:
    #         #     plot_recoil(acc,region,dataset=dataset,year=year, tag=tag, distribution='met')

    # region_comparison_plot(tag)
    # sf_comparison_plot(tag)
    data_mc_comparison_plot(tag)
示例#15
0
def main():
    acc = acc_from_dir('input/photon_pt_cut/')
    pdf_plot(acc)
示例#16
0
def eta_phi_plot(inpath):
    indir = os.path.abspath(inpath)

    acc = acc_from_dir(indir)
    outdir = pjoin('./output/', os.path.basename(indir))
    if not os.path.exists(outdir):
        os.makedirs(outdir)

    for year in [2017, 2018]:
        data = {
            'cr_1m_j': f'MET_{year}',
            'cr_2m_j': f'MET_{year}',
            'cr_1e_j': f'EGamma_{year}',
            'cr_2e_j': f'EGamma_{year}',
            # 'cr_g_j' : f'EGamma_{year}',
        }
        for region, datare in data.items():
            distributions = ['ak4_eta_phi']

            if 'e_' in region:
                distributions.append('electron_eta_phi')
            elif 'm_' in region:
                distributions.append('muon_eta_phi')
            for distribution in distributions:
                h = copy.deepcopy(acc[distribution])
                h = merge_extensions(h,
                                     acc,
                                     reweight_pu=('nopu' in distribution))
                scale_xs_lumi(h)
                h = merge_datasets(h)

                h = h.integrate('dataset', datare)
                h = h.integrate(h.axis('region'), region)
                fig, ax, _ = plot2d(h, xaxis='eta')

                ax.text(0.,
                        1.,
                        region,
                        fontsize=10,
                        horizontalalignment='left',
                        verticalalignment='top',
                        color='white',
                        transform=ax.transAxes)
                ax.text(1.,
                        0.,
                        distribution,
                        fontsize=10,
                        horizontalalignment='right',
                        verticalalignment='bottom',
                        transform=ax.transAxes)
                fig.text(1.,
                         1.,
                         f'{lumi(year)} fb$^{{-1}}$ ({year})',
                         fontsize=14,
                         horizontalalignment='right',
                         verticalalignment='bottom',
                         transform=ax.transAxes)
                fig.text(0.,
                         1.,
                         '$\\bf{CMS}$ internal',
                         fontsize=14,
                         horizontalalignment='left',
                         verticalalignment='bottom',
                         transform=ax.transAxes)
                outname = pjoin(outdir, f'{region}_{distribution}_{year}.pdf')
                fig.savefig(outname)
                print(f'Created file {outname}')
示例#17
0
def main():

    indir = "../lo_vs_nlo/input/2019-09-23_photon_overlap"

    acc = acc_from_dir(indir)

    for region in ['cr_2m_j', 'cr_2e_j', 'cr_1m_j', 'cr_1e_j', 'cr_g_j']:
        if '_1m_' in region or '_2m_' in region:
            sel_2017 = re.compile(f'MET_2017')
            sel_2018 = re.compile(f'MET_2018')
        else:
            sel_2017 = re.compile(f'EGamma_2017')
            sel_2018 = re.compile(f'EGamma_2018')

        for distribution in ['recoil']:
            # fig, ax, rax = make_plot(acc, region=region,distribution=distribution, year=2016, data=data, mc=mc, ylim=(1e-3,1e3), rylim=(0,2),outdir=f'./output/{os.path.basename(indir)}')
            fig, (ax,
                  rax) = plt.subplots(2,
                                      1,
                                      figsize=(7, 7),
                                      gridspec_kw={"height_ratios": (3, 1)},
                                      sharex=True)

            h = acc['recoil']
            h = merge_extensions(h, acc, reweight_pu=('nopu' in distribution))
            # scale_xs_lumi(h)
            h = merge_datasets(h)
            h = h.integrate(h.axis('region'), region)
            s = Style()
            try:
                newax = s.get_binning(distribution, region)
                h = h.rebin(h.axis(newax.name), newax)
            except KeyError:
                pass

            f = uproot.open('fitDiagnostics.root')
            h2016 = f['shapes_prefit'][regions[region]]['data']

            x, y = {}, {}
            # x[2016] = np.r_[0.5*(h2016.bins[:,0] + h2016.bins[:,1]),1500., 1700., 1900.]
            pprint(dir(h2016))
            x[2016] = np.r_[h2016.xvalues, 1500., 1700., 1900.]
            y[2016] = np.r_[h2016.yvalues / lumi(2016), 0, 0, 0]
            h2017 = h[sel_2017].integrate('dataset')
            h2018 = h[sel_2018].integrate('dataset')
            x[2017] = h2017.axis('recoil').centers()
            y[2017] = h2017.values()[()] / (np.diff(
                h2017.axis('recoil').edges())) / lumi(2017)
            x[2018] = h2018.axis('recoil').centers()
            y[2018] = h2018.values()[()] / (np.diff(
                h2018.axis('recoil').edges())) / lumi(2018)

            for year in x.keys():
                ax.plot(x[year], y[year], 'o-', label=f'{year}')
                rax.plot(x[year], y[year] / y[2016], '-o')

            ax.legend(title=region)
            ax.set_yscale('log')
            rax.set_xlabel(distribution)
            ax.set_xlabel(distribution)
            rax.set_ylabel('Ratio to 2016')
            ax.set_ylabel('Data cross section / bin')
            loc1 = matplotlib.ticker.MultipleLocator(base=0.2)
            loc2 = matplotlib.ticker.MultipleLocator(base=0.1)
            rax.yaxis.set_major_locator(loc1)
            rax.yaxis.set_minor_locator(loc2)
            rax.grid(axis='y', which='minor', linestyle='--')
            rax.grid(axis='y', which='major', linestyle='--')
            rax.set_ylim(0.5, 1.5)
            fig.savefig(f'output/{region}.pdf')
示例#18
0
def photon_triggers_merged():
    tag = 'gamma'
    indir = f"/home/albert/repos/bucoffea/bucoffea/plot/input/eff/{tag}/sel"
    acc = acc_from_dir(indir)

    # All regions
    regions = []
    for k in acc['photon_pt0'].axis('region').identifiers():
        k = str(k)
        if not k.startswith('tr_g'):
            continue
        regions.append(k)

    lumi_by_trig = {
        2017: {
            "HLT_PFHT1050": 41.527192272,
            "HLT_PFHT590": 0.444896852,
            "HLT_PFHT680": 0.785538800,
            "HLT_PFHT780": 1.461679046,
            "HLT_PFHT890": 2.802018098,
        },
        2018: {
            "HLT_PFHT1050": 59.735969368,
            "HLT_PFHT590": 0.467058719,
            "HLT_PFHT680": 0.924441113,
            "HLT_PFHT780": 1.837625206,
            "HLT_PFHT890": 3.661338636,
        }
    }
    overall_lumi = {2017: 41.527192272, 2018: 59.735969368}
    for year in [2017, 2018]:
        acc_cp = copy.deepcopy(acc)

        # Region combination mapping
        # 1. Scale each region according to effective lumi
        # 2. Combine regions with different triggers
        mapping = defaultdict(set)
        lumi_mapping = {}
        for rname in regions:
            base = re.sub(r'_HLT_PFHT(\d+)', '', rname)
            mapping[base].add(rname)

            for hlt, lumi in lumi_by_trig[year].items():
                if hlt in rname:
                    lumi_mapping[rname] = lumi / overall_lumi[year]

        pprint(lumi_mapping)

        pprint(mapping)
        region_ax = hist.Cat("region", "Selection region")
        year_regex = re.compile(f'.*{year}')

        for distribution in ['photon_pt0', 'recoil']:
            h = copy.deepcopy(acc[distribution])
            h = h[year_regex]
            h.scale(lumi_mapping, 'region')
            acc_cp[distribution] = h.group(
                region_ax, "region", {k: list(v)
                                      for k, v in mapping.items()})

            for region in mapping.keys():
                print(f"Region {region}")
                region = region.replace("tr_",
                                        "").replace("_num",
                                                    "").replace("_den", "")
                for dataset in ["GJets_HT_MLM", "JetHT"]:
                    if 'photon_pt_' in region:
                        distribution = 'recoil'
                        axis_name = 'recoil'
                    else:
                        distribution = 'photon_pt0'
                        axis_name = 'pt'
                    plot_recoil(acc_cp,
                                region,
                                dataset=dataset,
                                year=year,
                                tag=tag,
                                distribution=distribution,
                                axis_name=axis_name)
示例#19
0
def main():
    acc = acc_from_dir('input/pdfweight/')
    pdf_plot(acc)
示例#20
0
def main():

    # indir = "../input/21Aug19_v4_pdfwgt"

    # acc = acc_from_dir(indir)

    # for year in [2017]:
    #     data = re.compile(f'MET_{year}')
    #     mc = re.compile(f'(EW.*|TTJets.*|ZZ.*|ST.*|QCD_HT.*|WW.*|WZ.*|.*DYJetsToLL_M-50_HT_MLM.*){year}')
    #     region='cr_2m_j'
    #     for distribution in ['recoil']:
    #         make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, ylim=(1e-3,1e3), outdir=f'./output/{os.path.basename(indir)}')
    
    
    indir = "./input/2019-09-05_all_new_sf_neweletrig"

    acc = acc_from_dir(indir)

    def dimuon_plots():
        for year in [2017,2018]:
            data = re.compile(f'MET_{year}')
            mc = re.compile(f'(EW.*|TTJets.*FXFX.*|ST.*|QCD_HT.*|Diboson.*|.*DYJetsToLL_M-50_HT_MLM.*){year}')
            region='cr_2m_j'
            for distribution in ['recoil','ak4_pt0','dimuon_mass','muon_pt', 'dimuon_pt','met']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, ylim=(1e-3,1e3), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_phi0','muon_phi','dimuon_mass']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, ylim=(1e1,1e5), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_eta0', 'muon_eta','dimuon_eta']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, xlim=(-3,3),ylim=(1e3,1e5), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_chf0','ak4_nhf0']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, xlim=(0,1),ylim=(1e2,1e6), outdir=f'./output/{os.path.basename(indir)}/{region}')
    
    def dielectron_plots():
        for year in [2017,2018]:
            data = re.compile(f'EGamma_{year}')
            mc = re.compile(f'(EW.*|TTJets.*FXFX.*|ST.*|QCD_HT.*|Diboson.*|.*DYJetsToLL_M-50_HT_MLM.*){year}')
            region='cr_2e_j'
            for distribution in ['recoil','ak4_pt0','dielectron_mass','electron_pt', 'dielectron_pt','met']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, ylim=(1e-3,1e3), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_phi0','electron_phi','dielectron_mass']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, ylim=(1e1,1e5), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_eta0', 'electron_eta','dielectron_eta']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, xlim=(-3,3),ylim=(1e3,1e5), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_chf0','ak4_nhf0']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, xlim=(0,1),ylim=(1e2,1e6), outdir=f'./output/{os.path.basename(indir)}/{region}')
    
    def single_muon_plots():
        for year in [2017, 2018]:
            data = re.compile(f'MET_{year}')
            mc = re.compile(f'(TTJets.*FXFX.*|ST.*|QCD_HT.*|Diboson.*|W.*HT.*).*{year}')
            region='cr_1m_j'
            for distribution in ['recoil','ak4_pt0','muon_pt','met']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, ylim=(1e-3,1e5), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_phi0','muon_phi']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, ylim=(1e4,1e5), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_eta0', 'muon_eta']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, xlim=(-3,3),ylim=(1e4,1e6), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_chf0','ak4_nhf0']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, xlim=(0,1),ylim=(1e3,1e8), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['muon_mt']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, xlim=(0,180),ylim=(1e1,1e5), outdir=f'./output/{os.path.basename(indir)}/{region}')

    def single_electron_plots():
        for year in [2017, 2018]:
            data = re.compile(f'EGamma_{year}')
            mc = re.compile(f'(TTJets.*FXFX.*|ST.*|QCD_HT.*|Diboson.*|W.*HT.*).*{year}')
            region='cr_1e_j'
            for distribution in ['recoil','ak4_pt0','electron_pt','met']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, ylim=(1e-3,1e5), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_phi0','electron_phi']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, ylim=(1e4,1e5), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_eta0', 'electron_eta']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, xlim=(-3,3),ylim=(1e4,1e6), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_chf0','ak4_nhf0']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, xlim=(0,1),ylim=(1e3,1e8), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['electron_mt']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, xlim=(0,180),ylim=(1e1,1e5), outdir=f'./output/{os.path.basename(indir)}/{region}')

    def photon_plots():
        for year in [2017, 2018]:
            data = re.compile(f'EGamma_{year}')
            mc = re.compile(f'(GJets.*|QCD_HT.*|W.*HT.*).*{year}')
            region='cr_g_j'
            for distribution in ['recoil','ak4_pt0','photon_pt0','met']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, ylim=(1e-3,1e5), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_phi0','photon_phi0']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, ylim=(4e4,5e5), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_eta0', 'photon_eta0']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, xlim=(-3,3),ylim=(1e4,1e6), outdir=f'./output/{os.path.basename(indir)}/{region}')
            for distribution in ['ak4_chf0','ak4_nhf0']:
                make_plot(acc, region=region,distribution=distribution, year=year, data=data, mc=mc, xlim=(0,1),ylim=(1e3,1e8), outdir=f'./output/{os.path.basename(indir)}/{region}')

    # single_muon_plots()
    # dimuon_plots()
    # single_electron_plots()
    photon_plots()
    dielectron_plots()
示例#21
0
#!/usr/bin/env python
import re
from coffea.util import load
from coffea import hist
from matplotlib import pyplot as plt
from bucoffea.plot.util import acc_from_dir
import copy
from bucoffea.plot.util import merge_extensions, merge_datasets, scale_xs_lumi
acc = acc_from_dir('input/das_lhevpt_v2')

data_err_opts = {
    'linestyle': 'none',
    'marker': '.',
    'markersize': 10.,
    'color': 'k',
    'elinewidth': 1,
    'emarker': '_'
}

h = copy.deepcopy(acc['gen_vpt'])

h = merge_extensions(h, acc, reweight_pu=False)
scale_xs_lumi(h)
h = merge_datasets(h)

h = h.integrate('weight_type', 'nominal')
h = h.integrate('weight_index', slice(-0.5, 0.5))
h = h[re.compile('.*DY.*HT.*')].integrate('dataset')

new_ax = hist.Bin('vpt', 'Gen V $p_{T}$ (GeV)',
                  list(range(80, 800, 40)) + list(range(800, 2000, 100)))
示例#22
0
def main():

    indir = "../lo_vs_nlo/input/2019-09-26_checks/"

    acc = acc_from_dir(indir)

    for region in [
            'cr_2m_j', 'cr_1m_j', 'cr_2m_j_noveto_tau', 'cr_1m_j_noveto_tau',
            'cr_2m_j_noveto_photon', 'cr_1m_j_noveto_photon'
    ]:
        sel_2016 = re.compile(f'MET_2016')
        sel_2017 = re.compile(f'MET_2017')
        sel_2018 = re.compile(f'MET_2018')

        for distribution in axes.keys():
            # fig, ax, rax = make_plot(acc, region=region,distribution=distribution, year=2016, data=data, mc=mc, ylim=(1e-3,1e3), rylim=(0,2),outdir=f'./output/{os.path.basename(indir)}')
            fig, (ax,
                  rax) = plt.subplots(2,
                                      1,
                                      figsize=(7, 7),
                                      gridspec_kw={"height_ratios": (3, 1)},
                                      sharex=True)

            h = acc[distribution]
            h = merge_extensions(h, acc, reweight_pu=('nopu' in distribution))
            # scale_xs_lumi(h)
            h = merge_datasets(h)
            h = h.integrate(h.axis('region'), region)
            s = Style()
            try:
                newax = s.get_binning(distribution, region)
                h = h.rebin(h.axis(newax.name), newax)
            except KeyError:
                pass

            x, y = {}, {}
            h2016 = h[sel_2016].integrate('dataset')
            h2017 = h[sel_2017].integrate('dataset')
            h2018 = h[sel_2018].integrate('dataset')
            try:
                x[2016] = h2016.axis(axes[distribution]).centers()
                y[2016] = h2016.values()[()] / (np.diff(
                    h2016.axis(axes[distribution]).edges())) / lumi(2016)
                x[2017] = h2017.axis(axes[distribution]).centers()
                y[2017] = h2017.values()[()] / (np.diff(
                    h2017.axis(axes[distribution]).edges())) / lumi(2017)
                x[2018] = h2018.axis(axes[distribution]).centers()
                y[2018] = h2018.values()[()] / (np.diff(
                    h2018.axis(axes[distribution]).edges())) / lumi(2018)
            except KeyError:
                continue

            for year in x.keys():
                ax.plot(x[year],
                        y[year],
                        'o-',
                        label=f'{year} / {lumi(year)} fb-1')
                rax.plot(x[year], y[year] / y[2016], '-o')

            ax.legend(title=region)
            ax.set_yscale('log')
            rax.set_xlabel(distribution)
            ax.set_xlabel(distribution)
            rax.set_ylabel('Ratio to 2016')
            ax.set_ylabel('Data cross section / bin')
            loc1 = matplotlib.ticker.MultipleLocator(base=0.2)
            loc2 = matplotlib.ticker.MultipleLocator(base=0.1)
            rax.yaxis.set_major_locator(loc1)
            rax.yaxis.set_minor_locator(loc2)
            rax.grid(axis='y', which='minor', linestyle='--')
            rax.grid(axis='y', which='major', linestyle='--')
            rax.set_ylim(0.5, 1.5)
            outname = f'output/bu/{region}_{distribution}.pdf'
            fig.savefig(outname)
            print(f"Saved {outname}")
            plt.close(fig)