示例#1
0
    def test_plot(self):

        tdrstyle()
        paths = get_paths()
        dataset = 'Jul15'
        lepton = 'mu'
        systematic = 'nominal'
        iso = 'iso'

        #Define the different plots to make
        items = [
            ('tchan1', paths[dataset]['mc'][lepton][systematic][iso], 'T_t_ToLeptons.root', Cuts.n_jets(2), '1.0'),
            ('tbarchan1', '-.-', 'Tbar_t_ToLeptons.root', Cuts.n_jets(2), '1.0'),

            ('tchan2', '-.-', 'T_t_ToLeptons.root', Cuts.n_jets(2)*Cuts.n_tags(1), '1.0'),
            ('tbarchan2', '-.-', 'Tbar_t_ToLeptons.root', Cuts.n_jets(2)*Cuts.n_tags(1), '1.0'),
        ]
        items = fill_list(items)

        #Dewfine a callbakc for normalization
        def normalize(hn, h):
            norm(h)
            return h

        #The final plot definition to draw
        plot_def = {
            'var': 'mt_mu',
            'range': [20, 0, 300],
            'items': items,
            'merge_cmds': {'signal 2J1T':['tchan2', 'tbarchan2'], 'signal 2J':['tchan1', 'tbarchan1']},
            'xlab': 'M_t(W)'
            #'hist_callback': normalize
        }

        #Now do the draw comparison
        canv, hists = compare_plot(plot_def)

        #Do some post-checking that everything went fine
        for hn, h in hists.items():
            if hn=='signal 2J':
                self.assertAlmostEqual(h.Integral(), 39472.452918)
            elif hn=='signal 2J1T':
                self.assertAlmostEqual(h.Integral(), 16414.4804941)

        print "Saving the plot to test_plot.png"
        canv.SaveAs('test_plot.png')
示例#2
0
    merged_hists = merge_hists(histsD, merge_cmd)

    normd = dict()
    for hn, h in merged_hists.items():
        normd[hn] = get_hist_int_err(h)
    return merged_hists, normd


if __name__=="__main__":
    #cut = Cuts.mu * Cuts.n_jets(2) * Cuts.mt_mu * Cuts.top_mass_sig * Cuts.eta_lj * Cuts.n_tags(1)
    cut = Cuts.mu * Cuts.final(2,1)

    cutsref = [
        ("1mu", Cuts.mu, (5879691, 268238, 50236)),
        ("2J", Cuts.mu*Cuts.n_jets(2), (972069, 75674, 22387)),
        ("met", Cuts.mu*Cuts.n_jets(2)*Cut("met>45"), (404707, 46185, 11052)),
        ("0T", Cuts.mu*Cuts.n_jets(2)*Cut("met>45")*Cuts.n_tags(0), (-1, -1, -1)),
        ("rmslj_0T", Cuts.mu*Cuts.n_jets(2)*Cut("met>45")*Cuts.n_tags(0)*Cuts.rms_lj, (-1, -1, -1)),
        ("1T", Cuts.mu*Cuts.n_jets(2)*Cut("met>45")*Cuts.n_tags(1), (6197, 17505, 4173)),
        ("rmslj_1T", Cuts.mu*Cuts.n_jets(2)*Cut("met>45")*Cuts.n_tags(1)*Cuts.rms_lj, (5095, 14197, 3664)),
    ]

    for (name, cut, (refW, refTT, refT)) in cutsref:
        #hist, norms = mc_amount(cut, "pu_weight*muon_IDWeight*muon_IsoWeight")
        hist, norms = mc_amount(cut, "1.0")
        print 80*"-"
        print name
        print "t-channel | %d | %d | %d " % (norms["t-channel incl"][0], norms["t-channel excl"][0], refT)
        print "Wjets | %d | %d | %d " % (norms["WJets incl"][0], norms["WJets excl"][0], refW)
        print "ttbar | %d | %d | %d " % (norms["t#bar{t} incl"][0], norms["t#bar{t} excl"][0], refTT)
示例#3
0
    #isolated files are by default in $STPOL_DIR/step3_latest/mu/iso/nominal/*.root
    datadirs["iso"] = "/".join((os.environ["STPOL_DIR"], "step3_latest", "mu" ,"iso", "nominal"))
    #Use the anti-isolated data for QCD $STPOL_DIR/step3_latest/mu/antiiso/nominal/SingleMu.root
    datadirs["antiiso"] = "/".join((os.environ["STPOL_DIR"], "step3_latest", "mu" ,"antiiso", "nominal"))

    #Load all the samples in the isolated directory
    samples = Sample.fromDirectory(datadirs["iso"], out_type="dict")
    samples["SingleMu_aiso"] = Sample.fromFile(datadirs["antiiso"] + "/SingleMu.root")

    hists_mc = dict()
    hist_data = None

    #Define the variable, cut, weight and lumi
    var = "cos_theta"
    cut_name = "2j1t"
    cut_str = str(Cuts.n_jets(2)*Cuts.n_tags(1)*Cuts.lepton_veto*Cuts.one_muon*Cuts.mt_mu*Cuts.top_mass_sig*Cuts.eta_lj)
    weight_str = "1.0"
    lumi = 20000 #FIXME: take from the step2 output filelists/step2/latest/iso/nominal/luminosity.txt

    #nbins, min, max
    plot_range= [20, -1, 1]

    for name, sample in samples.items():
        if sample.isMC:
            hist = sample.drawHistogram(var, cut_str, weight=weight_str, plot_range=plot_range)
            hist.Scale(sample.lumiScaleFactor(lumi)*mc_sf)
            hists_mc[sample.name] = hist.hist
            Styling.mc_style(hists_mc[sample.name], sample.name)
        elif name == "SingleMu":
            hist_data = sample.drawHistogram(var, cut_str, weight="1.0", plot_range=plot_range)
            Styling.data_style(hist_data)
示例#4
0
文件: histo.py 项目: HEP-KBFI/stpol
    parser = argparse.ArgumentParser(
        description='Produces a hierarchy of histograms corresponding to cuts and weights.'
    )

    parser.add_argument('outfile', action='store',
        help="The output file name."
    )

    parser.add_argument('infiles', nargs='+',
        help="The input file names"
    )

    args = parser.parse_args()

    cuts_jet_tag = [
        ("%dj%dt"%(n,m), Cuts.n_jets(n)*Cuts.n_tags(m)) for n in [2,3] for m in [0,1,2]
    ]
    # cuts_jet_tag = [
    #     ("2j1t", Cuts.n_jets(2)*Cuts.n_tags(1))
    # ]

    cuts = []
    for cutname, cbline in cuts_jet_tag:
        for lep in ["mu", "ele"]:
            cn = "%s_%s" % (lep, cutname)
            baseline = Cuts.lepton(lep) * Cuts.hlt(lep) * Cuts.metmt(lep) * Cuts.rms_lj
            cuts += [
                #Without the MET cut
                ("%s_nomet" % cn, Cuts.lepton(lep) * Cuts.hlt(lep) * Cuts.rms_lj * cbline),

                #Baseline for fit
示例#5
0
from plots.common.cuts import Cuts,Cut
import copy
from plots.common.utils import PhysicsProcess, NestedDict

cp = copy.deepcopy

#FIXME: these cutlists need to be factorised away badly!
cutlist={}
cutlist['2j']=Cuts.n_jets(2)
cutlist['3j']=Cuts.n_jets(3)

cutlist['2j1t']=Cuts.n_jets(2)*Cuts.n_tags(1)
cutlist['2j0t']=Cuts.n_jets(2)*Cuts.n_tags(0)
cutlist['3j0t']=Cuts.n_jets(3)*Cuts.n_tags(0)
cutlist['3j1t']=Cuts.n_jets(3)*Cuts.n_tags(1)
cutlist['3j2t']=Cuts.n_jets(3)*Cuts.n_tags(2)


#Needed for RMS cut validation
cutlist['presel_ele_no_rms']=Cuts.hlt_isoele*Cuts.lepton_veto*Cuts.pt_jet*Cuts.one_electron
cutlist['presel_mu_no_rms']=Cuts.hlt_isomu*Cuts.lepton_veto*Cuts.pt_jet*Cuts.one_muon

cutlist['presel_ele'] = cutlist['presel_ele_no_rms']*Cuts.rms_lj
cutlist['presel_mu'] = cutlist['presel_mu_no_rms']*Cuts.rms_lj

cutlist['nomet_ele']=cutlist['presel_ele']*Cuts.top_mass_sig*Cuts.eta_lj
cutlist['nomt_mu']=cutlist['presel_mu']*Cuts.top_mass_sig*Cuts.eta_lj
cutlist['noeta_ele']=cutlist['presel_ele']*Cuts.top_mass_sig*Cuts.met()
cutlist['noeta_mu']=cutlist['presel_mu']*Cuts.top_mass_sig*Cuts.mt_mu()
cutlist['final_ele']=cutlist['nomet_ele']*Cuts.met()
cutlist['final_mu']=cutlist['nomt_mu']*Cuts.mt_mu()
示例#6
0
文件: met_phi.py 项目: HEP-KBFI/stpol
        "binning": [20, -1, 1]
    }
    variables["bdt"] = {
        "name": "bdt",
        "var": Cuts.mva_vars['mu'],
        "binning": [60, -1, 1]
    }

    weights = [
        ("weight__nominal", Weights.total_weight("mu")),
    ]


    c1 = (
        "2j0t",
        Cuts.mt_mu()*Cuts.n_jets(2)*Cuts.n_tags(0)*Cuts.lepton("mu")*Cuts.hlt("mu"),
    )
    c2 = (
        "2j1t",
        Cuts.mt_mu()*Cuts.n_jets(2)*Cuts.n_tags(1)*Cuts.lepton("mu")*Cuts.hlt("mu"),
    )
    c3 = (
        "final_cb_2j1t",
        Cuts.final(2,1),
    )
    cuts = [c1, c2, c3]

    varnodes = {}
    for k, v in variables.items():
        for c in cuts:
            vn = tree.hist_node(graph, v, c, weights)
示例#7
0
    normd = dict()
    for hn, h in merged_hists.items():
        normd[hn] = get_hist_int_err(h)
    return merged_hists, normd


if __name__ == "__main__":
    #cut = Cuts.mu * Cuts.n_jets(2) * Cuts.mt_mu * Cuts.top_mass_sig * Cuts.eta_lj * Cuts.n_tags(1)
    cut = Cuts.mu * Cuts.final(2, 1)

    cutsref = [
        ("1mu", Cuts.mu, (5879691, 268238, 50236)),
        ("2J", Cuts.mu * Cuts.n_jets(2), (972069, 75674, 22387)),
        ("met", Cuts.mu * Cuts.n_jets(2) * Cut("met>45"), (404707, 46185,
                                                           11052)),
        ("0T", Cuts.mu * Cuts.n_jets(2) * Cut("met>45") * Cuts.n_tags(0),
         (-1, -1, -1)),
        ("rmslj_0T", Cuts.mu * Cuts.n_jets(2) * Cut("met>45") *
         Cuts.n_tags(0) * Cuts.rms_lj, (-1, -1, -1)),
        ("1T", Cuts.mu * Cuts.n_jets(2) * Cut("met>45") * Cuts.n_tags(1),
         (6197, 17505, 4173)),
        ("rmslj_1T", Cuts.mu * Cuts.n_jets(2) * Cut("met>45") *
         Cuts.n_tags(1) * Cuts.rms_lj, (5095, 14197, 3664)),
    ]

    for (name, cut, (refW, refTT, refT)) in cutsref:
        #hist, norms = mc_amount(cut, "pu_weight*muon_IDWeight*muon_IsoWeight")
        hist, norms = mc_amount(cut, "1.0")
        print 80 * "-"
        print name
        print "t-channel | %d | %d | %d " % (norms["t-channel incl"][0],
示例#8
0
文件: yields.py 项目: HEP-KBFI/stpol
if __name__=="__main__":

    for fi in sys.argv[1:]:
        print fi
        samp = Sample.fromFile(fi)
        print "Lumi scale factor: ", samp.lumiScaleFactor(20000)
        for lep in ["mu", "ele"]:
            if "/%s/"%lep not in fi:
                continue
            print lep
            cut = None
            for cutname, _cut in [
                ("hlt", Cuts.hlt(lep)),
                ("lep", Cuts.single_lepton(lep)),
                ("2J", Cuts.n_jets(2)),
                ("1T", Cuts.n_tags(1)),
                ("MET/MtW", Cuts.metmt(lep)),
                ("rms", Cuts.rms_lj),
                ("Mtop", Cuts.top_mass_sig),
                ("etalj", Cuts.eta_lj)
                ]:
                if not cut:
                    cut = _cut
                else:
                    cut *= _cut
                try:
                    hi = samp.drawHistogram("eta_lj", str(cut), binning=[50, -5, 5])
                    hi.Scale(samp.lumiScaleFactor(20000))
                    print cutname
                    print hi.GetEntries(), hi.Integral()
                except:
示例#9
0
文件: flat.py 项目: HEP-KBFI/stpol
        
        #ROOT functions can be used
        ("abs_eta_lj", "abs(eta_lj)", [20, 0, 5]),

        ("bdt", Cuts.mva_vars['mu'], [60, -1, 1]),
    ]

    #Define all the weight strategies that we want to apply
    weights = [
        ("weight__nominal", Weights.total_weight("mu")),

        #Demonstrate reweighting
        ("weight__puw", Weights.pu("nominal")),
        ("weight__puw_up", Weights.pu("up")),
    ]

    #All the cut regions that we are interested in
    cuts = [
        ("2j0t", Cuts.mt_mu()*Cuts.n_jets(2)*Cuts.n_tags(0)*Cuts.lepton("mu")*Cuts.hlt("mu")),
        ("2j1t", Cuts.mt_mu()*Cuts.n_jets(2)*Cuts.n_tags(1)*Cuts.lepton("mu")*Cuts.hlt("mu")),
        ("final_cb_2j1t", Cuts.final(2,1))
    ]

    #Construct the analysis chain
    snodes, out = analysis_tree(cuts, weights, variables, args.infiles, args.outfile)

    print "Recursing down"
    for sn in snodes:
        sn.recurseDown()

    out.close()
示例#10
0
文件: tree.py 项目: HEP-KBFI/stpol
                    filter_funcs=[
                        lambda x: is_samp(x, "antiiso") and is_samp(x, "data")
                    ]
                )
                isol.append(isos[lep][cn])

    # [iso, antiiso] --> jet --> [jets2-3]
    jet = Node(graph, "jet", isol, [])
    jets = dict()
    for i in [2,3]:
        jets[i] = CutNode(Cuts.n_jets(i), graph, "%dj"%i, [jet], [])

    tag = Node(graph, "tag", jet.children(), [])
    tags = dict()
    for i in [0,1,2]:
        tags[i] = CutNode(Cuts.n_tags(i), graph, "%dt"%i, [tag], [])


    #The primary MET/MTW cut node
    met = Node(graph, "met", tag.children(), [])

    mets = dict()

    #No MET cut requirement
    mets['off'] = CutNode(Cuts.no_cut, graph, "met__off", [met], [],
    )

    for met_syst in ["nominal", "up", "down"]:
        mets['met_' + met_syst] = CutNode(
            Cuts.met(met_syst),
            graph, "met__met_" + met_syst,
示例#11
0
mvaFileList['sig']['eval']= [
    'T_t_ToLeptons',
    'Tbar_t_ToLeptons'
]
mvaFileList['bg']['train']= [
    'TTJets_MassiveBinDECAY',
    'WJets_inclusive'
]
mvaFileList['bg']['eval']= [
    'TTJets_FullLept',
    'TTJets_SemiLept',
    'W1Jets_exclusive',
    'W2Jets_exclusive',
    'W3Jets_exclusive',
    'W4Jets_exclusive'
]

varList={}
varList['ele'] = [ 'top_mass','eta_lj','C','met','mt_el','mass_bj','mass_lj','el_pt','pt_bj' ]
varList['mu']  = [ 'top_mass','eta_lj','C','met','mt_mu','mass_bj','mass_lj','mu_pt','pt_bj' ]

varRank={}
varRank['ele'] = ['top_mass', 'C', 'eta_lj', 'el_pt', 'mt_el', 'pt_bj', 'mass_bj', 'met', 'mass_lj']
varRank['mu'] = ['top_mass', 'eta_lj', 'C', 'mu_pt', 'mt_mu', 'met', 'mass_bj', 'pt_bj', 'mass_lj']

from plots.common.cuts import Cut,Cuts

cuts = {}
cuts['ele'] = Cuts.n_jets(2)*Cuts.n_tags(1)*Cuts.hlt_isoele*Cuts.lepton_veto*Cuts.pt_jet*Cuts.one_electron*Cuts.rms_lj*Cuts.met()
cuts['mu']  = Cuts.n_jets(2)*Cuts.n_tags(1)*Cuts.hlt_isomu*Cuts.lepton_veto*Cuts.pt_jet*Cuts.one_muon*Cuts.rms_lj*Cuts.mt_mu()