def scale_factors(channel, cut, apply_signal_cut=True, mt_cut=False): tchan = fit_sfs[channel][0] top = fit_sfs[channel][1] wzjets = fit_sfs[channel][2] if "2j1t" not in cut: tchan = 1 top = 1 wzjets = 1 qcd = top if apply_signal_cut: if "mva_loose" in cut: qcd = qcd * qcd_cut_SF["mva"]["loose"][channel] elif "cutbased_final" in cut: qcd = qcd * qcd_cut_SF["cutbased"]["final"][channel] if mt_cut is False: qcd = qcd * qcd_mt_fit_sfs[channel] else: qcd = qcd * load_qcd_sf(channel, mt_cut) ret = [ (["tchan"], tchan, -1), (["TTJets", "tWchan", "schan"], top, -1), (["qcd"], qcd, -1), (["WJets", "diboson", "DYJets"], wzjets, -1), ] return ret
def scale_factors(channel, cut, apply_signal_cut=True, mt_cut=False): tchan, tchan_err = fit_sfs[channel][0] top, top_err = fit_sfs[channel][1] wzjets, wzjets_err = fit_sfs[channel][2] if "2j1t" not in cut: tchan = 1 top = 1 wzjets = 1 qcd = top if apply_signal_cut: if "mva_loose" in cut: qcd = qcd * qcd_cut_SF['mva']['loose'][channel] elif "cutbased_final" in cut: qcd = qcd * qcd_cut_SF['cutbased']['final'][channel] if mt_cut is False: qcd_sf, qcd_err = qcd_mt_fit_sfs[channel] else: qcd_sf, qcd_err = load_qcd_sf(channel, mt_cut, do_uncertainty=True) qcd = qcd * qcd_sf # Calculate the total error in the QCD scale factor from the error in # the MET fit (qcd_err) and the BDT fit (top_err) assuming uncorrelate # errors. rel_qcd_err = qcd_err / qcd_sf rel_top_err = top_err / top tot_rel_qcd_err = math.sqrt(sum([x**2 for x in [rel_top_err, rel_qcd_err]])) tot_qcd_err = tot_rel_qcd_err * qcd ret = [ (['tchan'], tchan, tchan_err), (['TTJets', 'tWchan', 'schan'], top, top_err), (['qcd'], qcd, tot_qcd_err), (['WJets', 'diboson', 'DYJets'], wzjets, wzjets_err) ] return ret
from plots.common.tdrstyle import tdrstyle from plots.fit_scale_factors import fitpars_process from plots.qcd_scale_factors import load_qcd_sf, qcd_cut_SF from plots.vars import varnames from plots.common.histogram import calc_int_err import os, copy, math import numpy as np channels_pretty = {"mu":"Muon", "ele":"Electron"} #Determined from the QCD fit qcd_mt_fit_sfs = dict() qcd_mt_fit_sfs['mu'] = load_qcd_sf('mu', 50, do_uncertainty=True) qcd_mt_fit_sfs['ele'] = load_qcd_sf('ele', 45, do_uncertainty=True) #Determined as the ratio of the integral of anti-iso data after full selection / full selection minus MVA #See qcd_scale_factors.ipynb for determination qcd_loose_to_MVA_sfs = qcd_cut_SF['mva']['loose'] fit_sfs = dict() fit_sfs['mu'] = [x[1:] for x in fitpars_process['final_2j1t_mva']['mu']] fit_sfs['ele'] = [x[1:] for x in fitpars_process['final_2j1t_mva']['ele']] # FIXME: load from file # final_fit/results/ele__mva_BDT_with_top_mass_C_eta_lj_el_pt_mt_el_pt_bj_mass_bj_met_mass_lj.txt # final_fit/results/mu__mva_BDT_with_top_mass_eta_lj_C_mu_pt_mt_mu_met_mass_bj_pt_bj_mass_lj.txt Rab = 0.289989 #tchan top
from plots.common.cross_sections import lumis from plots.common.tdrstyle import tdrstyle from plots.fit_scale_factors import fitpars_process from plots.qcd_scale_factors import load_qcd_sf, qcd_cut_SF from plots.vars import varnames from plots.common.histogram import calc_int_err import os channels_pretty = {"mu": "Muon", "ele": "Electron"} # Determined from the QCD fit qcd_mt_fit_sfs = dict() qcd_mt_fit_sfs["mu"] = load_qcd_sf("mu", 50) qcd_mt_fit_sfs["ele"] = load_qcd_sf("ele", 45) # Determined as the ratio of the integral of anti-iso data after full selection / full selection minus MVA # See qcd_scale_factors.ipynb for determination qcd_loose_to_MVA_sfs = qcd_cut_SF["mva"]["loose"] fit_sfs = dict() fit_sfs["mu"] = [x[1] for x in fitpars_process["final_2j1t_mva"]["mu"]] fit_sfs["ele"] = [x[1] for x in fitpars_process["final_2j1t_mva"]["ele"]] def scale_factors(channel, cut, apply_signal_cut=True, mt_cut=False): tchan = fit_sfs[channel][0] top = fit_sfs[channel][1] wzjets = fit_sfs[channel][2]