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)}')
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)
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)
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)
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)
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)
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)
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.*))')
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}')
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')
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)
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)
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)
def main(): acc = acc_from_dir('input/photon_pt_cut/') pdf_plot(acc)
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}')
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')
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)
def main(): acc = acc_from_dir('input/pdfweight/') pdf_plot(acc)
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()
#!/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)))
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)