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')
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)
#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)
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
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()
"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)
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],
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:
#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()
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,
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()