def process(self, event): dileptons = getattr(event, self.cfg_ana.dileptons) leptons = [dileptons[0].leg1(), dileptons[0].leg2()] jets = getattr(event, self.cfg_ana.jets) clean_jets, dirty_jets = cleanObjectCollection( jets, masks=leptons, deltaRMin=self.cfg_ana.drmin) setattr(event, self.cfg_ana.output, clean_jets)
def process(self, event): self.readCollections(event.input) miniaodjets = self.handles['jets'].product() allJets = [] event.jets = [] event.bJets = [] event.cleanJets = [] event.cleanBJets = [] leptons = [] if hasattr(event, 'selectedLeptons'): leptons = event.selectedLeptons genJets = None if self.cfg_comp.isMC: genJets = map(GenJet, self.mchandles['genJets'].product()) for maodjet in miniaodjets: jet = Jet(maodjet) allJets.append(jet) if self.cfg_comp.isMC and hasattr(self.cfg_comp, 'jetScale'): scale = random.gauss(self.cfg_comp.jetScale, self.cfg_comp.jetSmear) jet.scaleEnergy(scale) if genJets: # Use DeltaR = 0.25 matching like JetMET pairs = matchObjectCollection([jet], genJets, 0.25 * 0.25) if pairs[jet] is None: pass else: jet.matchedGenJet = pairs[jet] #Add JER correction for MC jets. Requires gen-jet matching. if self.cfg_comp.isMC and hasattr( self.cfg_ana, 'jerCorr') and self.cfg_ana.jerCorr: self.jerCorrection(jet) #Add JES correction for MC jets. if self.cfg_comp.isMC and hasattr(self.cfg_ana, 'jesCorr'): self.jesCorrection(jet, self.cfg_ana.jesCorr) if self.testJet(jet): event.jets.append(jet) if self.testBJet(jet): event.bJets.append(jet) self.counters.counter('jets').inc('all events') event.cleanJets, dummy = cleanObjectCollection(event.jets, masks=leptons, deltaRMin=0.5) event.cleanBJets, dummy = cleanObjectCollection(event.bJets, masks=leptons, deltaRMin=0.5) pairs = matchObjectCollection(leptons, allJets, 0.5 * 0.5) # associating a jet to each lepton for lepton in leptons: jet = pairs[lepton] if jet is None: lepton.jet = lepton else: lepton.jet = jet # associating a leg to each clean jet invpairs = matchObjectCollection(event.cleanJets, leptons, 99999.) for jet in event.cleanJets: leg = invpairs[jet] jet.leg = leg for jet in event.cleanJets: jet.matchGenParton = 999.0 if self.cfg_comp.isMC and "BB" in self.cfg_comp.name: genParticles = self.mchandles['genParticles'].product() event.genParticles = map(GenParticle, genParticles) for gen in genParticles: if abs(gen.pdgId()) == 5 and gen.mother() and abs( gen.mother().pdgId()) == 21: for jet in event.cleanJets: dR = deltaR2(jet.eta(), jet.phi(), gen.eta(), gen.phi()) if dR < jet.matchGenParton: jet.matchGenParton = dR event.jets30 = [jet for jet in event.jets if jet.pt() > 30] event.cleanJets30 = [jet for jet in event.cleanJets if jet.pt() > 30] if len(event.jets30) >= 2: self.counters.counter('jets').inc('at least 2 good jets') if len(event.cleanJets30) >= 2: self.counters.counter('jets').inc('at least 2 clean jets') if len(event.cleanBJets) > 0: self.counters.counter('jets').inc('at least 1 b jet') if len(event.cleanBJets) > 1: self.counters.counter('jets').inc('at least 2 b jets') return True
def process(self, event): self.readCollections(event.input) miniaodjets = self.handles['jets'].product() allJets = [] event.jets = [] event.bJets = [] event.cleanJets = [] event.cleanBJets = [] leptons = [] if hasattr(event, 'selectedLeptons'): leptons = event.selectedLeptons if hasattr(self.cfg_ana, 'toClean'): leptons = getattr(event, self.cfg_ana.toClean) if hasattr(self.cfg_ana, 'leptonCollections'): for coll in self.cfg_ana.leptonCollections: leptons += self.handles[coll].product() genJets = None if self.cfg_comp.isMC: genJets = map(GenJet, self.mchandles['genJets'].product()) allJets = [Jet(jet) for jet in miniaodjets] if self.recalibrateJets: self.jetReCalibrator.correctAll(allJets, event.rho, delta=0., addCorr=True, addShifts=True) for jet in allJets: if genJets: # Use DeltaR = 0.25 matching like JetMET pairs = matchObjectCollection([jet], genJets, 0.25 * 0.25) if pairs[jet] is None: pass else: jet.matchedGenJet = pairs[jet] # Add JER correction for MC jets. Requires gen-jet matching. if self.cfg_comp.isMC and hasattr( self.cfg_ana, 'jerCorr') and self.cfg_ana.jerCorr: self.jerCorrection(jet) # Add JES correction for MC jets. if self.cfg_comp.isMC and hasattr(self.cfg_ana, 'jesCorr'): self.jesCorrection(jet, self.cfg_ana.jesCorr) if self.testJet(jet): event.jets.append(jet) if self.testBJet(jet): event.bJets.append(jet) self.counters.counter('jets').inc('all events') event.cleanJets, dummy = cleanObjectCollection(event.jets, masks=leptons, deltaRMin=0.5) event.cleanBJets, dummy = cleanObjectCollection(event.bJets, masks=leptons, deltaRMin=0.5) # Attach matched jets to selected + other leptons if hasattr(event, 'otherLeptons'): leptons += event.otherLeptons pairs = matchObjectCollection(leptons, allJets, 0.5 * 0.5) # associating a jet to each lepton for lepton in leptons: jet = pairs[lepton] if jet is None: lepton.jet = lepton else: lepton.jet = jet # associating a leg to each clean jet invpairs = matchObjectCollection(event.cleanJets, leptons, 99999.) for jet in event.cleanJets: leg = invpairs[jet] jet.leg = leg for jet in event.cleanJets: jet.matchGenParton = 999.0 event.jets30 = [jet for jet in event.jets if jet.pt() > 30] event.cleanJets30 = [jet for jet in event.cleanJets if jet.pt() > 30] if len(event.jets30) >= 2: self.counters.counter('jets').inc('at least 2 good jets') if len(event.cleanJets30) >= 2: self.counters.counter('jets').inc('at least 2 clean jets') if len(event.cleanBJets) > 0: self.counters.counter('jets').inc('at least 1 b jet') if len(event.cleanBJets) > 1: self.counters.counter('jets').inc('at least 2 b jets') # save HTs event.HT_allJets = sum([jet.pt() for jet in allJets]) event.HT_jets = sum([jet.pt() for jet in event.jets]) event.HT_bJets = sum([jet.pt() for jet in event.bJets]) event.HT_cleanJets = sum([jet.pt() for jet in event.cleanJets]) event.HT_jets30 = sum([jet.pt() for jet in event.jets30]) event.HT_cleanJets30 = sum([jet.pt() for jet in event.cleanJets30]) return True
def process(self, event): self.readCollections( event.input ) tr = self.tree tr.reset() fill( tr, 'run', event.input.eventAuxiliary().id().run()) fill( tr, 'lumi', event.input.eventAuxiliary().id().luminosityBlock()) fill( tr, 'evt', event.input.eventAuxiliary().id().event()) genParticles = self.mchandles['genParticles'].product() event.genParticles = map( GenParticle, genParticles) # # For Z # # parent = 23 # # parent_status = 22 # # For Higgs # parent = 25 # parent_status = 3 bosonParents = [23, 25] bosonStati = [3, 22] bosons = [self.finalSelf(gen) for gen in event.genParticles if gen.status() in bosonStati and abs(gen.pdgId()) in bosonParents] if len(bosons)!=1: strerr = '{nhiggs} bosons! :\n {comp}'.format(nhiggs=len(higbosonsgsBosons), comp=str(self.cfg_comp)) print strerr return False boson = bosons[0] # Get generated taus taus = [] for i_d in range(boson.numberOfDaughters()): daughter = boson.daughter(i_d) if abs(daughter.pdgId()) == 15: taus.append(self.finalSelf(daughter)) if len(taus) != 2: print 'Non-tau decay' return False # Get tau daughters tauDecayIds = [] muon = None had_tau = None for tau in taus: decayId = 15 for i_d in range(tau.numberOfDaughters()): if abs(tau.daughter(i_d).pdgId()) == 13: muon = self.finalSelf(tau.daughter(i_d)) decayId = 13 continue elif abs(tau.daughter(i_d).pdgId()) == 11: decayId = 11 continue if decayId == 15: had_tau = tau tauDecayIds.append(decayId) if not (13 in tauDecayIds and 15 in tauDecayIds): print 'Not a mu-tau decay' return False fillGenParticle(tr, 'l2_gen', muon) genVisTau = self.getVisibleP4(muon) fill(tr, 'l2_gen_vis_pt', genVisTau.pt()) fill(tr, 'l2_gen_vis_eta', genVisTau.eta()) fill(tr, 'l2_gen_vis_phi', genVisTau.phi()) fill(tr, 'l2_gen_vis_m', genVisTau.mass()) fill(tr, 'l2_gen_decay_pdgId', muon.pdgId()) fillGenParticle(tr, 'higgs', boson) fillGenParticle(tr, 'l1_gen', had_tau) genVisTau1 = self.getVisibleP4(had_tau) fill(tr, 'l1_gen_vis_pt', genVisTau1.pt()) fill(tr, 'l1_gen_vis_eta', genVisTau1.eta()) fill(tr, 'l1_gen_vis_phi', genVisTau1.phi()) fill(tr, 'l1_gen_vis_m', genVisTau1.mass()) fill(tr, 'l1_gen_decay_pdgId', had_tau.pdgId()) daughters = [muon, had_tau] genJets = self.mchandles['genJets'].product() event.genJets = map(GenJet, genJets) selGenJets = [jet for jet in event.genJets if jet.pt() > 30 and abs(jet.eta()) < 4.7] cleanGenJets, dummy = cleanObjectCollection( selGenJets, masks = daughters, deltaRMin = 0.5) cleanGenJets.sort(key=lambda x: -x.pt()) deta = -1 mjj = -1 ncentral = -1 fill(tr, 'nGenJets', len(cleanGenJets)) if len(cleanGenJets) >= 2: deta = cleanGenJets[0].eta() - cleanGenJets[1].eta() dijetp4 = cleanGenJets[0].p4() + cleanGenJets[1].p4() mjj = dijetp4.M() leadJets = cleanGenJets[:2] otherJets = cleanGenJets[2:] centralJets = self.findCentralJets( leadJets, otherJets ) ncentral = len(centralJets) fill(tr, 'mjj', mjj) fill(tr, 'deta', deta) fill(tr, 'nCentral', ncentral) if len(cleanGenJets)>=1: fillGenParticle(tr, 'genjet1', cleanGenJets[0]) if len(cleanGenJets)>=2: fillGenParticle(tr, 'genjet2', cleanGenJets[1]) neutrinos = [p for p in event.genParticles if abs(p.pdgId()) in (12, 14, 16) and self.isFinal(p)] if neutrinos: genMet = neutrinos[0].p4() for p in neutrinos[1:]: genMet += p.p4() fill(tr, 'genMet', p.pt()) fill(tr, 'genMex', p.px()) fill(tr, 'genMey', p.py()) else: fill(tr, 'genMet', 0.) fill(tr, 'genMex', 0.) fill(tr, 'genMey', 0.) quarksGluons = [p for p in event.genParticles if abs(p.pdgId()) in (1, 2, 3, 4, 5, 21) and p.status() == 3 and (p.numberOfDaughters() == 0 or p.daughter(0).status() != 3)] quarksGluons.sort(key=lambda x: -x.pt()) for i in range(0, min(self.maxNGenJets, len(quarksGluons))): fillGenParticle(tr, 'genQG_{i}'.format(i=i), quarksGluons[i]) self.tree.tree.Fill()
def process(self, event): self.readCollections(event.input) miniaodjets = self.handles['jets'].product() allJets = [] event.jets = [] event.bJets = [] event.cleanJets = [] event.cleanBJets = [] leptons = [] if hasattr(event, 'selectedLeptons'): leptons = event.selectedLeptons genJets = None if self.cfg_comp.isMC: genJets = map(GenJet, self.mchandles['genJets'].product()) for maodjet in miniaodjets: jet = Jet(maodjet) allJets.append(jet) if self.cfg_comp.isMC and hasattr(self.cfg_comp, 'jetScale'): scale = random.gauss(self.cfg_comp.jetScale, self.cfg_comp.jetSmear) jet.scaleEnergy(scale) if genJets: # Use DeltaR = 0.25 matching like JetMET pairs = matchObjectCollection([jet], genJets, 0.25 * 0.25) if pairs[jet] is None: pass else: jet.matchedGenJet = pairs[jet] # Add JER correction for MC jets. Requires gen-jet matching. if self.cfg_comp.isMC and hasattr(self.cfg_ana, 'jerCorr') and self.cfg_ana.jerCorr: self.jerCorrection(jet) # Add JES correction for MC jets. if self.cfg_comp.isMC and hasattr(self.cfg_ana, 'jesCorr'): self.jesCorrection(jet, self.cfg_ana.jesCorr) if self.testJet(jet): event.jets.append(jet) if self.testBJet(jet): event.bJets.append(jet) self.counters.counter('jets').inc('all events') event.cleanJets, dummy = cleanObjectCollection(event.jets, masks=leptons, deltaRMin=0.5) event.cleanBJets, dummy = cleanObjectCollection(event.bJets, masks=leptons, deltaRMin=0.5) pairs = matchObjectCollection(leptons, allJets, 0.5 * 0.5) # associating a jet to each lepton for lepton in leptons: jet = pairs[lepton] if jet is None: lepton.jet = lepton else: lepton.jet = jet # associating a leg to each clean jet invpairs = matchObjectCollection(event.cleanJets, leptons, 99999.) for jet in event.cleanJets: leg = invpairs[jet] jet.leg = leg for jet in event.cleanJets: jet.matchGenParton = 999.0 if self.cfg_comp.isMC and "BB" in self.cfg_comp.name: genParticles = self.mchandles['genParticles'].product() event.genParticles = map(GenParticle, genParticles) for gen in genParticles: if abs(gen.pdgId()) == 5 and gen.mother() and abs(gen.mother().pdgId()) == 21: for jet in event.cleanJets: dR = deltaR2(jet.eta(), jet.phi(), gen.eta(), gen.phi()) if dR < jet.matchGenParton: jet.matchGenParton = dR event.jets30 = [jet for jet in event.jets if jet.pt() > 30] event.cleanJets30 = [jet for jet in event.cleanJets if jet.pt() > 30] if len(event.jets30) >= 2: self.counters.counter('jets').inc('at least 2 good jets') if len(event.cleanJets30) >= 2: self.counters.counter('jets').inc('at least 2 clean jets') if len(event.cleanBJets) > 0: self.counters.counter('jets').inc('at least 1 b jet') if len(event.cleanBJets) > 1: self.counters.counter('jets').inc('at least 2 b jets') return True
def process(self, event): self.counters.counter('jets').inc('all events') self.readCollections(event.input) miniaodjets = self.handles['jets'].product() allJets = [] to_clean_against = [] if hasattr(self.cfg_ana, 'toClean'): for collection in self.cfg_ana.toClean: to_clean_against += getattr(event, collection) genJets = None if self.cfg_comp.isMC: genJets = map(GenJet, self.mchandles['genJets'].product()) allJets = [Jet(jet) for jet in miniaodjets] if self.recalibrateJets: self.jetReCalibrator.correctAll(allJets, event.rho, delta=0., addCorr=True, addShifts=True) for jet in allJets: if genJets: # Use DeltaR = 0.25 matching like JetMET pairs = matchObjectCollection([jet], genJets, 0.25 * 0.25) if pairs[jet] is None: pass else: jet.matchedGenJet = pairs[jet] # Add JER correction for MC jets. Requires gen-jet matching. if self.cfg_comp.isMC and hasattr( self.cfg_ana, 'jerCorr') and self.cfg_ana.jerCorr: self.jerCorrection(jet) # Add JES correction for MC jets. if self.cfg_comp.isMC and hasattr(self.cfg_ana, 'jesCorr'): self.jesCorrection(jet, self.cfg_ana.jesCorr) jet.btagMVA = jet.btag( 'pfCombinedInclusiveSecondaryVertexV2BJetTags' ) #TODO switch to deepCSV jet.btagged = self.btagSF.isBTagged( pt=jet.pt(), eta=jet.eta(), csv=jet.btag("pfCombinedInclusiveSecondaryVertexV2BJetTags"), jetflavor=abs(jet.hadronFlavour()), is_data=not self.cfg_comp.isMC, csv_cut= 0.800 #CSVM from https://twiki.cern.ch/twiki/bin/viewauth/CMS/BtagRecommendation80X ) ## if self.testJet(jet): ## event.jets.append(jet) ## if self.testBJet(jet): ## event.bJets.append(jet) allJets = [ jet for jet in allJets if bool(jet.jetID("POG_PFID_Loose")) if jet.pt() > 20. if abs(jet.eta()) < 2.4 ] if len(allJets) < 2: return False self.counters.counter('jets').inc('at least 2 good jets') event.jets, dummy = cleanObjectCollection(allJets, masks=to_clean_against, deltaRMin=0.5) if len(event.jets) < 2: return False self.counters.counter('jets').inc('at least 2 clean jets') event.bJets = [jet for jet in event.jets if jet.btagged] if len(event.bJets) != 2: return False self.counters.counter('jets').inc('exactly 2 b jets') # save HTs event.HT_jets = sum([jet.pt() for jet in event.jets]) event.HT_bJets = sum([jet.pt() for jet in event.bJets]) return True
def process(self, event): self.readCollections(event.input) tr = self.tree tr.reset() fill(tr, 'run', event.input.eventAuxiliary().id().run()) fill(tr, 'lumi', event.input.eventAuxiliary().id().luminosityBlock()) fill(tr, 'evt', event.input.eventAuxiliary().id().event()) genParticles = self.mchandles['genParticles'].product() event.genParticles = map(GenParticle, genParticles) # # For Z # # parent = 23 # # parent_status = 22 # # For Higgs # parent = 25 # parent_status = 3 bosonParents = [23, 25] bosonStati = [3, 22] bosons = [ self.finalSelf(gen) for gen in event.genParticles if gen.status() in bosonStati and abs(gen.pdgId()) in bosonParents ] if len(bosons) != 1: strerr = '{nhiggs} bosons! :\n {comp}'.format( nhiggs=len(higbosonsgsBosons), comp=str(self.cfg_comp)) print strerr return False boson = bosons[0] # Get generated taus taus = [] for i_d in range(boson.numberOfDaughters()): daughter = boson.daughter(i_d) if abs(daughter.pdgId()) == 15: taus.append(self.finalSelf(daughter)) if len(taus) != 2: print 'Non-tau decay' return False # Get tau daughters tauDecayIds = [] muon = None had_tau = None for tau in taus: decayId = 15 for i_d in range(tau.numberOfDaughters()): if abs(tau.daughter(i_d).pdgId()) == 13: muon = self.finalSelf(tau.daughter(i_d)) decayId = 13 continue elif abs(tau.daughter(i_d).pdgId()) == 11: decayId = 11 continue if decayId == 15: had_tau = tau tauDecayIds.append(decayId) if not (13 in tauDecayIds and 15 in tauDecayIds): print 'Not a mu-tau decay' return False fillGenParticle(tr, 'l2_gen', muon) genVisTau = self.getVisibleP4(muon) fill(tr, 'l2_gen_vis_pt', genVisTau.pt()) fill(tr, 'l2_gen_vis_eta', genVisTau.eta()) fill(tr, 'l2_gen_vis_phi', genVisTau.phi()) fill(tr, 'l2_gen_vis_m', genVisTau.mass()) fill(tr, 'l2_gen_decay_pdgId', muon.pdgId()) fillGenParticle(tr, 'higgs', boson) fillGenParticle(tr, 'l1_gen', had_tau) genVisTau1 = self.getVisibleP4(had_tau) fill(tr, 'l1_gen_vis_pt', genVisTau1.pt()) fill(tr, 'l1_gen_vis_eta', genVisTau1.eta()) fill(tr, 'l1_gen_vis_phi', genVisTau1.phi()) fill(tr, 'l1_gen_vis_m', genVisTau1.mass()) fill(tr, 'l1_gen_decay_pdgId', had_tau.pdgId()) daughters = [muon, had_tau] genJets = self.mchandles['genJets'].product() event.genJets = map(GenJet, genJets) selGenJets = [ jet for jet in event.genJets if jet.pt() > 30 and abs(jet.eta()) < 4.7 ] cleanGenJets, dummy = cleanObjectCollection(selGenJets, masks=daughters, deltaRMin=0.5) cleanGenJets.sort(key=lambda x: -x.pt()) deta = -1 mjj = -1 ncentral = -1 fill(tr, 'nGenJets', len(cleanGenJets)) if len(cleanGenJets) >= 2: deta = cleanGenJets[0].eta() - cleanGenJets[1].eta() dijetp4 = cleanGenJets[0].p4() + cleanGenJets[1].p4() mjj = dijetp4.M() leadJets = cleanGenJets[:2] otherJets = cleanGenJets[2:] centralJets = self.findCentralJets(leadJets, otherJets) ncentral = len(centralJets) fill(tr, 'mjj', mjj) fill(tr, 'deta', deta) fill(tr, 'nCentral', ncentral) if len(cleanGenJets) >= 1: fillGenParticle(tr, 'genjet1', cleanGenJets[0]) if len(cleanGenJets) >= 2: fillGenParticle(tr, 'genjet2', cleanGenJets[1]) neutrinos = [ p for p in event.genParticles if abs(p.pdgId()) in (12, 14, 16) and self.isFinal(p) ] if neutrinos: genMet = neutrinos[0].p4() for p in neutrinos[1:]: genMet += p.p4() fill(tr, 'genMet', p.pt()) fill(tr, 'genMex', p.px()) fill(tr, 'genMey', p.py()) else: fill(tr, 'genMet', 0.) fill(tr, 'genMex', 0.) fill(tr, 'genMey', 0.) quarksGluons = [ p for p in event.genParticles if abs(p.pdgId()) in (1, 2, 3, 4, 5, 21) and p.status() == 3 and ( p.numberOfDaughters() == 0 or p.daughter(0).status() != 3) ] quarksGluons.sort(key=lambda x: -x.pt()) for i in range(0, min(self.maxNGenJets, len(quarksGluons))): fillGenParticle(tr, 'genQG_{i}'.format(i=i), quarksGluons[i]) self.tree.tree.Fill()
def process(self, event): self.readCollections(event.input) # create Heppy Jet objects allJets = map(Jet, self.handles['jets'].product()) # create intially empty jet collections event.jets = [] event.bJets = [] event.cleanJets = OrderedDict() event.cleanJets30 = OrderedDict() event.cleanBJets = OrderedDict() # selected leptons as defined in the analyzer prior to this leptons = getattr(event, 'selectedLeptons', []) genJets = None if self.cfg_comp.isMC: genJets = map(GenJet, self.mchandles['genJets'].product()) # recalibrate jets if self.recalibrateJets: self.jetReCalibrator.correctAll(allJets, event.rho, delta=0., metShift=[0.,0.], addCorr=True, addShifts=True) # fill the various jet collections and # possibly correct jets (if configured to do so) for jet in allJets: if genJets: # Use DeltaR = 0.25 matching like JetMET pairs = matchObjectCollection([jet], genJets, 0.25 * 0.25) if pairs[jet] is None: pass else: jet.matchedGenJet = pairs[jet] # Add JER/JES correction for MC jets. Requires gen-jet matching. # Add JES correction for MC jets. if self.cfg_comp.isMC and hasattr(self.cfg_ana, 'jerCorr') and self.cfg_ana.jerCorr: self.jerCorrection(jet) if self.cfg_comp.isMC and hasattr(self.cfg_ana, 'jesCorr') : self.jesCorrection(jet, self.cfg_ana.jesCorr) # preselect jets if self.testJet(jet) : event.jets.append(jet) # compute deepjet scores only once self._prepareDeepJet(jet, year=self.cfg_ana.year, wp=getattr(self.cfg_ana, 'btag_wp', 'medium')) # create collection of bjets if self.testBJet(jet, year=self.cfg_ana.year, wp=getattr(self.cfg_ana, 'btag_wp', 'medium'), final_state='tot'): event.bJets.append(jet) self.counters.counter('jets').inc('all events') for final_state in ['mmm', 'mem', 'eee', 'eem']: if final_state not in leptons.keys(): continue # RM: found out that there's not a lot of final state dependency, # so we'll use the inclusive measurement that has better stats # preselect jets, with the appropriate btag SF correction **final state dependent**! # event.bJets = [] # for jet in event.jets: # if self.testBJet(jet, # year=self.cfg_ana.year, # wp=getattr(self.cfg_ana, 'btag_wp', 'medium'), # final_state=final_state): # event.bJets.append(jet) # clean jets from selected leptons (per final state!) event.cleanJets [final_state], dummy = cleanObjectCollection(event.jets , masks=leptons[final_state], deltaRMin=0.5) event.cleanBJets[final_state], dummy = cleanObjectCollection(event.bJets, masks=leptons[final_state], deltaRMin=0.5) pairs = matchObjectCollection(leptons[final_state], allJets, 0.5 * 0.5) # associating a jet to each lepton for lepton in leptons[final_state]: jet = pairs[lepton] if jet is None: lepton.jet = lepton else: lepton.jet = jet # associating to each (clean) jet the lepton that's closest to it invpairs = matchObjectCollection(event.cleanJets[final_state], leptons[final_state], 99999.) for jet in event.cleanJets[final_state]: leg = invpairs[jet] jet.leg = leg for jet in event.cleanJets[final_state]: jet.matchGenParton = 999.0 event.jets30 = [jet for jet in event.jets if jet.pt() > 30] event.cleanJets30[final_state] = [jet for jet in event.cleanJets[final_state] if jet.pt() > 30] return True
def process(self, event): self.readCollections(event.input) cmgJets = self.handles['jets'].product() allJets = [] event.jets = [] event.bJets = [] event.cleanJets = [] event.cleanBJets = [] leg1 = event.diLepton.leg1() leg2 = event.diLepton.leg2() genJets = None if self.cfg_comp.isMC: genJets = map(GenJet, self.mchandles['genJets'].product()) for cmgJet in cmgJets: jet = Jet(cmgJet) allJets.append(jet) if self.cfg_comp.isMC and hasattr(self.cfg_comp, 'jetScale'): scale = random.gauss(self.cfg_comp.jetScale, self.cfg_comp.jetSmear) jet.scaleEnergy(scale) if self.testJet(jet): event.jets.append(jet) if self.testBJet(jet): event.bJets.append(jet) if genJets: # Use DeltaR = 0.25 matching like JetMET pairs = matchObjectCollection([jet], genJets, 0.25 * 0.25) if pairs[jet] is None: pass else: jet.matchedGenJet = pairs[jet] #Add JER correction for MC jets. Requires gen-jet matching if self.cfg_comp.isMC and hasattr( self.cfg_ana, 'jerCorr') and self.cfg_ana.jerCorr: self.jerCorrection(jet) self.counters.counter('VBF').inc('all events') event.cleanJets, dummy = cleanObjectCollection(event.jets, masks=[leg1, leg2], deltaRMin=0.5) event.cleanBJets, dummy = cleanObjectCollection(event.bJets, masks=[leg1, leg2], deltaRMin=0.5) pairs = matchObjectCollection([leg1, leg2], allJets, 0.5 * 0.5) # associating a jet to each leg leg1.jet = pairs[leg1] leg2.jet = pairs[leg2] if leg1.jet is None: #COLIN: I don't understand the code below... leg1.jet = leg1 if leg2.jet is None: leg2.jet = leg2 # associating a leg to each clean jet invpairs = matchObjectCollection(event.cleanJets, [leg1, leg2], 99999.) for jet in event.cleanJets: leg = invpairs[jet] jet.leg = leg for jet in event.cleanJets: jet.matchGenParton = 999.0 if self.cfg_comp.isMC and "BB" in self.cfg_comp.name: genParticles = self.mchandles['genParticles'].product() event.genParticles = map(GenParticle, genParticles) for gen in genParticles: if abs(gen.pdgId()) == 5 and gen.mother() and abs( gen.mother().pdgId()) == 21: for jet in event.cleanJets: dR = deltaR2(jet.eta(), jet.phi(), gen.eta(), gen.phi()) if dR < jet.matchGenParton: jet.matchGenParton = dR event.jets30 = [jet for jet in event.jets if jet.pt() > 30] event.cleanJets30 = [jet for jet in event.cleanJets if jet.pt() > 30] if len(event.jets30) >= 2: self.counters.counter('VBF').inc('at least 2 good jets') if len(event.cleanJets30) >= 2: self.counters.counter('VBF').inc('at least 2 clean jets') if len(event.cleanJets) < 2: return True event.vbf = VBF(event.cleanJets, event.diLepton, None, self.cfg_ana.cjvPtCut) if event.vbf.mjj > self.cfg_ana.Mjj: self.counters.counter('VBF').inc( 'M_jj > {cut:3.1f}'.format(cut=self.cfg_ana.Mjj)) else: return True if abs(event.vbf.deta) > self.cfg_ana.deltaEta: self.counters.counter('VBF').inc( 'delta Eta > {cut:3.1f}'.format(cut=self.cfg_ana.deltaEta)) else: return True if len(event.vbf.centralJets) == 0: self.counters.counter('VBF').inc('no central jets') else: return True return True