def process(self, event): # needed when doing handle.product(), goes back to # PhysicsTools.Heppy.analyzers.core.Analyzer self.readCollections(event.input) if not eval(self.skimFunction): return False ptSelGentauleps = [] ptSelGenleps = [] ptSelGenSummary = [] if self.cfg_comp.isMC: event.genJets = self.mchandles['genJets'].product() ptcut = 8. ptSelGentauleps = [ lep for lep in event.gentauleps if lep.pt() > ptcut ] ptSelGenleps = [lep for lep in event.genleps if lep.pt() > ptcut] ptSelGenSummary = [ p for p in event.generatorSummary if p.pt() > ptcut and abs(p.pdgId()) not in [6, 23, 24, 25, 35, 36, 37] ] for i_dil, dil in enumerate(event.selDiLeptons): muon = dil.leg1() jet = dil.leg2() found = False for corr_jet in event.jets: if deltaR2(jet.eta(), jet.phi(), corr_jet.eta(), corr_jet.phi()) < 0.01: pt = max( corr_jet.pt(), corr_jet.pt() * corr_jet.corrJECUp / corr_jet.corr, corr_jet.pt() * corr_jet.corrJECDown / corr_jet.corr) if pt < 20.: continue found = True if not found: continue tau = jet.tau if hasattr(jet, 'tau') else None if self.cfg_comp.isMC: if tau: DYJetsFakeAnalyzer.genMatch(event, tau, ptSelGentauleps, ptSelGenleps, ptSelGenSummary) DYJetsFakeAnalyzer.attachGenStatusFlag(tau) DYJetsFakeAnalyzer.genMatch(event, muon, ptSelGentauleps, ptSelGenleps, ptSelGenSummary) DYJetsFakeAnalyzer.attachGenStatusFlag(muon) self.tree.reset() self.fillEvent(self.tree, event) self.fillDiLepton(self.tree, event.diLepton, fill_svfit=False) self.fillExtraMetInfo(self.tree, event) self.fillGenInfo(self.tree, event) self.fillJetMETVars(event) self.fillMuon(self.tree, 'muon', muon) jet = Jet(jet) jet.btagMVA = jet.btag( 'pfCombinedInclusiveSecondaryVertexV2BJetTags') jet.btagFlag = jet.btagMVA > 0.8 self.fillJet(self.tree, 'oriJet', jet) self.fill(self.tree, 'jet_nth', i_dil) for corr_jet in event.jets: if deltaR2(jet.eta(), jet.phi(), corr_jet.eta(), corr_jet.phi()) < 0.01: self.fillJet(self.tree, 'jet', corr_jet) self.fill(self.tree, 'jet_nooverlap', True if corr_jet in event.cleanJets else False) self.fill(self.tree, 'jet_corrJECUp', corr_jet.corrJECUp / corr_jet.corr) self.fill(self.tree, 'jet_corrJECDown', corr_jet.corrJECDown / corr_jet.corr) self.fill(self.tree, 'jet_corr', corr_jet.corr) if tau: self.fillTau(self.tree, 'tau', tau) if hasattr(tau, 'genp') and tau.genp: self.fillGenParticle(self.tree, 'tau_gen', tau.genp) if tau.genJet(): self.fillGenParticle(self.tree, 'tau_gen_vis', tau.genJet()) self.fill(self.tree, 'tau_gen_decayMode', tauDecayModes.genDecayModeInt(tau.genJet())) self.fillTree(event)