def run_with_chain(tree, n_max_entries=-1): nttool = r.SusyNtTools() m_entry = r.Long(-1) ntevent = r.Susy.SusyNtObject(m_entry) ntevent.ReadFrom(tree) isSimplifiedModel = False nttool.buildSumwMap(tree, isSimplifiedModel) period, useRewUtils = 'Moriond', False trig_logic = r.DilTrigLogic(period, useRewUtils) n_entries_to_print = 4 sys = utils.SusyNtSys.NtSys_NOM tauId = utils.TauID tauJetId, tauEleId, tauMuoId = tauId.TauID_loose, tauId.TauID_medium, tauId.TauID_medium cutflow = Cutflow() for iEntry, entry in enumerate(tree): m_entry = iEntry if n_max_entries>0 and m_entry >= n_max_entries : break if iEntry < n_entries_to_print : print 'run ', ntevent.evt().run,' event ',ntevent.evt().event pre_elecs = nttool.getPreElectrons(ntevent, sys) pre_muons = nttool.getPreMuons(ntevent, sys) pre_taus = nttool.getPreTaus(ntevent, sys) pre_jets = nttool.getPreJets(ntevent, sys) nttool.performOverlap(pre_elecs, pre_muons, pre_taus, pre_jets) nttool.removeSFOSPair(pre_elecs, 12.0) nttool.removeSFOSPair(pre_muons, 12.0) rmLepsFromIso = False n_vertices = ntevent.evt().nVtx is_mc = ntevent.evt().isMC sig_elecs = nttool.getSignalElectrons(pre_elecs, pre_muons, n_vertices, is_mc, rmLepsFromIso) sig_muons = nttool.getSignalMuons(pre_muons, pre_elecs, n_vertices, is_mc, rmLepsFromIso) sig_taus = nttool.getSignalTaus(pre_taus, tauJetId, tauEleId, tauMuoId) sig_jets = nttool.getSignalJets(pre_jets, sys) sig_jets2l = nttool.getSignalJets2Lep(pre_jets, sys) met = nttool.getMet(ntevent, sys) pre_lep, sig_lep = r.LeptonVector(), r.LeptonVector() nttool.buildLeptons(pre_lep, pre_elecs, pre_muons) nttool.buildLeptons(sig_lep, sig_elecs, sig_muons) if iEntry<n_entries_to_print: print 'pre_lep:\n','\n'.join(["[%d] %s (eta,phi,pt) = (%.3f, %.3f, %.3f)" % (iL, "mu" if l.isMu() else "el", l.Eta(), l.Phi(), l.Pt()) for iL, l in enumerate(pre_lep)]) event_flag = ntevent.evt().cutFlags[0] def mll(leps): return (leps[0] + leps[1]).M() try: cutflow.cut_if(False, 'input') cutflow.cut_if(not nttool.passLAr(event_flag), 'lar') cutflow.cut_if(not nttool.passBadJet(event_flag), 'bad_jet') cutflow.cut_if(not nttool.passBadMuon(event_flag), 'bad_mu') cutflow.cut_if(not nttool.passCosmic(event_flag), 'cosmic') cutflow.cut_if(not pre_lep.size()==2, '2lep') cutflow.cut_if(not trig_logic.passDilTrig(pre_lep, met.Et, ntevent.evt()), 'trigger') cutflow.cut_if(not mll(pre_lep)>20.0, 'mll20') except SkipEvent: continue print '\n'+8*'-'+' cutflow '+8*'-' print cutflow
def fill_histos(input_files, histos, tree_name='susyNt', max_num_entries=None, verbose=False): "fill histograms (for now unweighted, just to do a per-lepton comparison)" chain = r.TChain(tree_name) for f in input_files: chain.Add(f) num_entries = chain.GetEntries() if verbose: print "About to loop on %d entries" % num_entries nttool = r.SusyNtTools() m_entry = r.Long(-1) ntevent = r.Susy.SusyNtObject(m_entry) ntevent.ReadFrom(chain) isSimplifiedModel = False period, useRewUtils = 'Moriond', False trig_logic = r.DilTrigLogic(period, useRewUtils) n_entries_to_print = 4 sys = utils.SusyNtSys.NtSys_NOM tauId = utils.TauID tauJetId, tauEleId, tauMuoId = tauId.TauID_loose, tauId.TauID_medium, tauId.TauID_medium cutflow = Cutflow() for iEntry, entry in enumerate(chain): m_entry = iEntry if max_num_entries and iEntry > max_num_entries: break pre_elecs = nttool.getPreElectrons(ntevent, sys) pre_muons = nttool.getPreMuons(ntevent, sys) pre_taus = nttool.getPreTaus(ntevent, sys) pre_jets = nttool.getPreJets(ntevent, sys) nttool.performOverlap(pre_elecs, pre_muons, pre_taus, pre_jets) nttool.removeSFOSPair(pre_elecs, 12.0) nttool.removeSFOSPair(pre_muons, 12.0) rmLepsFromIso = False n_vertices = ntevent.evt().nVtx is_mc = ntevent.evt().isMC sig_elecs = nttool.getSignalElectrons(pre_elecs, pre_muons, n_vertices, is_mc, rmLepsFromIso) sig_muons = nttool.getSignalMuons(pre_muons, pre_elecs, n_vertices, is_mc, rmLepsFromIso) sig_taus = nttool.getSignalTaus(pre_taus, tauJetId, tauEleId, tauMuoId) sig_jets = nttool.getSignalJets(pre_jets, sys) sig_jets2l = nttool.getSignalJets2Lep(pre_jets, sys) met = nttool.getMet(ntevent, sys) pre_lep, sig_lep = r.LeptonVector(), r.LeptonVector() nttool.buildLeptons(pre_lep, pre_elecs, pre_muons) nttool.buildLeptons(sig_lep, sig_elecs, sig_muons) if verbose and iEntry < n_entries_to_print: print 'pre_lep:\n', '\n'.join([ "[%d] %s (eta,phi,pt) = (%.3f, %.3f, %.3f)" % (iL, "mu" if l.isMu() else "el", l.Eta(), l.Phi(), l.Pt()) for iL, l in enumerate(pre_lep) ]) event_flag = ntevent.evt().cutFlags[0] def mll(leps): return (leps[0] + leps[1]).M() try: cutflow.cut_if(False, 'input') cutflow.cut_if(not nttool.passLAr(event_flag), 'lar') cutflow.cut_if(not nttool.passBadJet(event_flag), 'bad_jet') cutflow.cut_if(not nttool.passBadMuon(event_flag), 'bad_mu') cutflow.cut_if(not nttool.passCosmic(event_flag), 'cosmic') cutflow.cut_if(not pre_lep.size() == 2, '2lep') cutflow.cut_if( not trig_logic.passDilTrig(pre_lep, met.Et, ntevent.evt()), 'trigger') cutflow.cut_if(not mll(pre_lep) > 20.0, 'mll20') for el in sig_elecs: histos['el_pt'].Fill(el.Pt()) histos['el_eta'].Fill(el.Eta()) histos['el_phi'].Fill(el.Phi()) for mu in sig_muons: histos['mu_pt'].Fill(mu.Pt()) histos['mu_eta'].Fill(mu.Eta()) histos['mu_phi'].Fill(mu.Phi()) except SkipEvent: continue print '\n' + 8 * '-' + ' cutflow ' + 8 * '-' print cutflow