def process(self, iEvent, event): event.isFake = 0 if not self.cfg_comp.isMC: return True result = super(DYJetsFakeAnalyzer, self).process(iEvent, event) # check if it is a Z->tau tau event. tauDaus, bosonPresent = bosonToX(event.genParticles, 23, 15) if not bosonPresent: event.isFake = 0 else: # isZtautau = len( tauDaus )==2 taus = filter(lambda x: x.status() == 3 and abs(x.pdgId()) == 15, event.genParticles) isZtautau = len(taus) == 2 hadronicTaus = [tau for tau in taus if self.isHadronicTau(tau)] # print '-'*50 # print map(str, taus) # print isZtautau # Updated recipe Aug 2013: match both electrons and muons regardless of status # with pt > 8 genLeptons = filter( lambda x: x.pt() > 8.0 and (abs(x.pdgId()) == 11 or abs(x.pdgId()) == 13), event.genParticles ) # genLegs, dummy = bosonToX( event.genParticles, 23, # self.cfg_ana.leptonType ) # import pdb; pdb.set_trace() lepPairs = matchObjectCollection([event.diLepton.leg1(), event.diLepton.leg2()], genLeptons, 0.5 ** 2) tauPairs = matchObjectCollection([event.diLepton.leg1(), event.diLepton.leg2()], hadronicTaus, 0.5 ** 2) # if lepPairs[event.diLepton.leg1()] and lepPairs[event.diLepton.leg2()]: # Updated recipe: Only match tau leg, not lepton leg # This assumes that leg 1 is the hadronic tau! if isZtautau and not lepPairs[event.diLepton.leg1()] and tauPairs[event.diLepton.leg1()]: event.isFake = 0 elif isZtautau and lepPairs[event.diLepton.leg1()]: event.isFake = 3 elif not isZtautau and lepPairs[event.diLepton.leg1()]: # import pdb; pdb.set_trace() # print 'fake1',event.diLepton.leg1().pdgId(), event.diLepton.leg2().pdgId() event.isFake = 1 # Keep this explicitly, but would be covered by global else below elif isZtautau and not tauPairs[event.diLepton.leg1()]: event.isFake = 2 elif not isZtautau and not lepPairs[event.diLepton.leg1()]: event.isFake = 2 else: print "WARNING: Logic issue, no assignment in DY jets fake analyzer" if self.cfg_ana.verbose: # import pdb; pdb.set_trace() print event.diLepton print "isFake = ", event.isFake return True
def process(self, iEvent, event): self.readCollections(iEvent) ## Read jets, if necessary recalibrate allJets = map(Jet, self.handles['jets'].product()) if self.cfg_ana.recalibrateJets: #print "\nCalibrating jets %s for lumi %d, event %d" % (self.cfg_ana.jetCol, event.lumi, event.eventId) rho = float(self.handles['rho'].product()[0]) corr = self.jetReCalibratorCHS if 'CHS' in self.cfg_ana.jetCol else self.jetReCalibrator for j in allJets: corr.correct(j, rho, delta=self.shiftJEC) ## If using a different collection for MVA, set it up allJets4MVA = [] if self.cfg_ana.jetCol4MVA != self.cfg_ana.jetCol: allJets4MVA = map(Jet, self.handles['jets4MVA'].product()) if self.cfg_ana.recalibrateJets: #print "\nCalibrating jets %s for lumi %d, event %d" % (self.cfg_ana.jetCol4MVA, event.lumi, event.eventId) rho = float(self.handles['rho'].product()[0]) corr = self.jetReCalibratorCHS if 'CHS' in self.cfg_ana.jetCol4MVA else self.jetReCalibrator for j in allJets4MVA: corr.correct(j, rho, delta=self.shiftJEC) else: allJets4MVA = allJets[:] ## Apply jet selection event.jets = [] event.jetsFailId = [] for jet in allJets: if self.testJetNoID(jet): if self.testJetID(jet): event.jets.append(jet) else: event.jetsFailId.append(jet) ## Clean Jets from leptons leptons = event.selectedLeptons #event.cleanJets, dummy = cleanObjectCollection( event.jets, # masks = leptons, # deltaRMin = 0.5 ) event.cleanJetsAll = cleanNearestJetOnly(event.jets, leptons, 0.5) event.cleanJets = [ j for j in event.cleanJetsAll if abs(j.eta()) < self.cfg_ana.jetEtaCentral ] event.cleanJetsFwd = [ j for j in event.cleanJetsAll if abs(j.eta()) >= self.cfg_ana.jetEtaCentral ] ## Associate jets to leptons jlpairs = matchObjectCollection(leptons, allJets4MVA, 0.5 * 0.5) for lep in leptons: jet = jlpairs[lep] if jet is None: lep.jet = lep else: lep.jet = jet return True
def process(self, iEvent, event): self.readCollections( iEvent ) ## Read jets, if necessary recalibrate allJets = map(Jet, self.handles['jets'].product()) if self.cfg_ana.recalibrateJets: #print "\nCalibrating jets %s for lumi %d, event %d" % (self.cfg_ana.jetCol, event.lumi, event.eventId) rho = float(self.handles['rho'].product()[0]) corr = self.jetReCalibratorCHS if 'CHS' in self.cfg_ana.jetCol else self.jetReCalibrator for j in allJets: corr.correct(j, rho, delta=self.shiftJEC) ## If using a different collection for MVA, set it up allJets4MVA = [] if self.cfg_ana.jetCol4MVA != self.cfg_ana.jetCol: allJets4MVA = map(Jet, self.handles['jets4MVA'].product()) if self.cfg_ana.recalibrateJets: #print "\nCalibrating jets %s for lumi %d, event %d" % (self.cfg_ana.jetCol4MVA, event.lumi, event.eventId) rho = float(self.handles['rho'].product()[0]) corr = self.jetReCalibratorCHS if 'CHS' in self.cfg_ana.jetCol4MVA else self.jetReCalibrator for j in allJets4MVA: corr.correct(j, rho, delta=self.shiftJEC) else: allJets4MVA = allJets[:] ## Apply jet selection event.jets = [] event.jetsFailId = [] for jet in allJets: if self.testJetNoID( jet ): if self.testJetID (jet ): event.jets.append(jet) else: event.jetsFailId.append(jet) ## Clean Jets from leptons leptons = event.selectedLeptons #event.cleanJets, dummy = cleanObjectCollection( event.jets, # masks = leptons, # deltaRMin = 0.5 ) event.cleanJetsAll = cleanNearestJetOnly(event.jets, leptons, 0.5) event.cleanJets = [j for j in event.cleanJetsAll if abs(j.eta()) < self.cfg_ana.jetEtaCentral ] event.cleanJetsFwd = [j for j in event.cleanJetsAll if abs(j.eta()) >= self.cfg_ana.jetEtaCentral ] ## Associate jets to leptons jlpairs = matchObjectCollection( leptons, allJets4MVA, 0.5*0.5) for lep in leptons: jet = jlpairs[lep] if jet is None: lep.jet = lep else: lep.jet = jet return True
def process(self, iEvent, event ): self.readCollections(iEvent) event.gen = [] for genp in self.mchandles['gen'].product(): if abs(genp.pdgId())!= self.cfg_ana.gen_pdgId: continue event.gen.append( GenParticle(genp) ) event.col1 = map(PhysicsObject, self.handles['col1'].product()) event.col2 = map(PhysicsObject, self.handles['col2'].product()) for p in event.col1: if hasattr( self.cfg_ana, 'sel1'): p.selected = self.cfg_ana.sel1( p ) else: p.selected = True for p in event.col2: if hasattr( self.cfg_ana, 'sel2'): p.selected = self.cfg_ana.sel2( p ) else: p.selected = True # first collection is taken as a pivot. # will store in the tree all instances in col1, and each time, # the closest object in col2 event.pairs = matchObjectCollection( event.col1, event.col2, self.cfg_ana.deltaR ) event.pairsG1 = matchObjectCollection( event.gen, event.col1, self.cfg_ana.deltaR ) event.pairsG2 = matchObjectCollection( event.gen, event.col2, self.cfg_ana.deltaR )
def process(self, iEvent, event): self.readCollections(iEvent) event.gen = [] for genp in self.mchandles['gen'].product(): if abs(genp.pdgId()) != self.cfg_ana.gen_pdgId: continue event.gen.append(GenParticle(genp)) event.col1 = map(PhysicsObject, self.handles['col1'].product()) event.col2 = map(PhysicsObject, self.handles['col2'].product()) for p in event.col1: if hasattr(self.cfg_ana, 'sel1'): p.selected = self.cfg_ana.sel1(p) else: p.selected = True for p in event.col2: if hasattr(self.cfg_ana, 'sel2'): p.selected = self.cfg_ana.sel2(p) else: p.selected = True # first collection is taken as a pivot. # will store in the tree all instances in col1, and each time, # the closest object in col2 event.pairs = matchObjectCollection(event.col1, event.col2, self.cfg_ana.deltaR) event.pairsG1 = matchObjectCollection(event.gen, event.col1, self.cfg_ana.deltaR) event.pairsG2 = matchObjectCollection(event.gen, event.col2, self.cfg_ana.deltaR)
def process(self, iEvent, event): event.isFake = 0 if not self.cfg_comp.isMC: return True result = super(DYJetsFakeAnalyzer, self).process(iEvent, event) # check if it is a Z->tau tau event. tauDaus, bosonPresent = bosonToX( event.genParticles, 23, 15) if not bosonPresent: event.isFake = 0 else: # isZtautau = len( tauDaus )==2 taus = filter(lambda x: x.status()==3 and abs(x.pdgId())==15, event.genParticles) isZtautau = len(taus)==2 # print '-'*50 # print map(str, taus) # print isZtautau # Updated recipe Aug 2013: match both electrons and muons regardless of status # with pt > 8 genLeptons = filter(lambda x: x.pt() > 8. and (abs(x.pdgId()) == 11 or abs(x.pdgId()) == 13), event.genParticles) # genLegs, dummy = bosonToX( event.genParticles, 23, # self.cfg_ana.leptonType ) # import pdb; pdb.set_trace() pairs = matchObjectCollection( [event.diLepton.leg1(), event.diLepton.leg2()], genLeptons, 0.5**2 ) # if pairs[event.diLepton.leg1()] and pairs[event.diLepton.leg2()]: # Updated recipe: Only match tau leg, not lepton leg # This assumes that leg 1 is the hadronic tau! if isZtautau and not pairs[event.diLepton.leg1()]: event.isFake = 0 elif isZtautau and pairs[event.diLepton.leg1()]: event.isFake = 3 elif pairs[event.diLepton.leg1()]: # import pdb; pdb.set_trace() # print 'fake1',event.diLepton.leg1().pdgId(), event.diLepton.leg2().pdgId() event.isFake = 1 else: event.isFake = 2 if self.cfg_ana.verbose: # import pdb; pdb.set_trace() print event.diLepton print 'isFake = ', event.isFake return True
def process(self, iEvent, event): event.isFake = 0 if not self.cfg_comp.isMC: return True result = super(DYJetsFakeAnalyzer, self).process(iEvent, event) # check if it is a Z->tau tau event. tauDaus, bosonPresent = bosonToX( event.genParticles, 23, 15) if not bosonPresent: event.isFake = 0 else: # isZtautau = len( tauDaus )==2 taus = filter(lambda x: x.status()==3 and abs(x.pdgId())==15, event.genParticles) isZtautau = len(taus)==2 # print '-'*50 # print map(str, taus) # print isZtautau if isZtautau: event.isFake = 0 else: genLegs, dummy = bosonToX( event.genParticles, 23, self.cfg_ana.leptonType ) # import pdb; pdb.set_trace() pairs = matchObjectCollection( [event.diLepton.leg1(), event.diLepton.leg2()], genLegs, 0.3**2 ) if pairs[event.diLepton.leg1()] and pairs[event.diLepton.leg2()]: # import pdb; pdb.set_trace() # print 'fake1',event.diLepton.leg1().pdgId(), event.diLepton.leg2().pdgId() event.isFake = 1 else: event.isFake = 2 if self.cfg_ana.verbose: # import pdb; pdb.set_trace() print event.diLepton print 'isFake = ', event.isFake return True
def process(self, iEvent, event): self.readCollections( iEvent ) cmgJets = 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 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 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.cleanJets)<2: return True return True
def process(self, iEvent, event): self.readCollections( iEvent ) 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 #jet.genJet = None else: jet.genJet = 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
def process(self, iEvent, event): event.isFake = 0 if not self.cfg_comp.isMC: return True result = super(DYJetsFakeAnalyzer, self).process(iEvent, event) # check if it is a Z->tau tau event. tauDaus, bosonPresent = bosonToX(event.genParticles, 23, 15) if not bosonPresent: event.isFake = 0 else: # isZtautau = len( tauDaus )==2 taus = filter(lambda x: x.status() == 3 and abs(x.pdgId()) == 15, event.genParticles) isZtautau = len(taus) == 2 hadronicTaus = [tau for tau in taus if self.isHadronicTau(tau)] # print '-'*50 # print map(str, taus) # print isZtautau # Updated recipe Aug 2013: match both electrons and muons regardless of status # with pt > 8 genLeptons = filter( lambda x: x.pt() > 8. and (abs(x.pdgId()) == 11 or abs(x.pdgId()) == 13), event.genParticles) # genLegs, dummy = bosonToX( event.genParticles, 23, # self.cfg_ana.leptonType ) # import pdb; pdb.set_trace() lepPairs = matchObjectCollection( [event.diLepton.leg1(), event.diLepton.leg2()], genLeptons, 0.5**2) tauPairs = matchObjectCollection( [event.diLepton.leg1(), event.diLepton.leg2()], hadronicTaus, 0.5**2) # if lepPairs[event.diLepton.leg1()] and lepPairs[event.diLepton.leg2()]: # Updated recipe: Only match tau leg, not lepton leg # This assumes that leg 1 is the hadronic tau! if isZtautau and not lepPairs[event.diLepton.leg1()] and tauPairs[ event.diLepton.leg1()]: event.isFake = 0 elif isZtautau and lepPairs[event.diLepton.leg1()]: event.isFake = 3 elif not isZtautau and lepPairs[event.diLepton.leg1()]: # import pdb; pdb.set_trace() # print 'fake1',event.diLepton.leg1().pdgId(), event.diLepton.leg2().pdgId() event.isFake = 1 # Keep this explicitly, but would be covered by global else below elif isZtautau and not tauPairs[event.diLepton.leg1()]: event.isFake = 2 elif not isZtautau and not lepPairs[event.diLepton.leg1()]: event.isFake = 2 else: print 'WARNING: Logic issue, no assignment in DY jets fake analyzer' if self.cfg_ana.verbose: # import pdb; pdb.set_trace() print event.diLepton print 'isFake = ', event.isFake return True
def process(self, iEvent, event): self.readCollections( iEvent ) cmgJets = self.handles['jets'].product() print 'cmgJets = ', len(cmgJets) allJets = [] event.jets = [] event.bJets = [] event.cleanJets = [] event.cleanBJets = [] # import pdb; pdb.set_trace(); leptons = [] if hasattr(event, 'selectedLeptons'): leptons = event.selectedLeptons # elif hasattr(event, 'muoncand'): ## leptons = event.muoncand + event.electroncand + event.taucand # leptons = event.muon + event.electron + event.tau # print '# of leptons = ', len(leptons) 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 genJets: # Use DeltaR = 0.25 matching like JetMET pairs = matchObjectCollection( [jet], genJets, 0.25*0.25) if pairs[jet] is None: pass #jet.genJet = None else: jet.genJet = pairs[jet] # print jet, jet.genJet #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') # print 'check =', len(event.muon), len(event,electron), len(event.tau) # if isinstance(event.muoncand, list): # event.cleanBJets, dummy = cleanObjectCollection( event.bJets, # masks = event.muoncand, # deltaRMin = 0.4 ) # # event.cleanJets, dummy = cleanObjectCollection( event.jets, # masks = event.muoncand, # deltaRMin = 0.4 ) # # else: # event.cleanBJets, dummy = cleanObjectCollection( event.bJets, # masks = [event.muoncand], # deltaRMin = 0.4 ) # # event.cleanJets, dummy = cleanObjectCollection( event.jets, # masks = [event.muoncand], # deltaRMin = 0.4 ) # # if isinstance(event.electroncand, list): # event.cleanBJets, dummy = cleanObjectCollection( event.cleanBJets, # masks = event.electroncand, # deltaRMin = 0.4 ) # # event.cleanJets, dummy = cleanObjectCollection( event.cleanJets, # masks = event.electroncand, # deltaRMin = 0.4 ) # # else: # event.cleanBJets, dummy = cleanObjectCollection( event.cleanBJets, # masks = [event.electroncand], # deltaRMin = 0.4 ) # # # event.cleanJets, dummy = cleanObjectCollection( event.cleanJets, # masks = [event.electroncand], # deltaRMin = 0.4 ) # # # if isinstance(event.taucand, list): # event.cleanBJets, dummy = cleanObjectCollection( event.cleanBJets, # masks = event.taucand, # deltaRMin = 0.4 ) # # event.cleanJets, dummy = cleanObjectCollection( event.cleanJets, # masks = event.taucand, # deltaRMin = 0.4 ) # # else: # event.cleanBJets, dummy = cleanObjectCollection( event.cleanBJets, # masks = [event.taucand], # deltaRMin = 0.4 ) # # # event.cleanJets, dummy = cleanObjectCollection( event.cleanJets, # masks = [event.taucand], # deltaRMin = 0.4 ) 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') event.cleanJets = event.jets event.cleanBJets = event.bJets # print 'cleanJets = ', len(event.jets) # print 'clean_bJets = ', len(event.bJets) # if len(event.bJets)>0: # if len(event.cleanBJets)>0: # import pdb; pdb.set_trace() # return False self.counters.counter('jets').inc('No b jets') return True
def process(self, iEvent, event): self.readCollections( iEvent ) event.pusi = map( PileUpSummaryInfo, self.mchandles['pusi'].product() ) event.vertices = self.handles['vertices'].product() event.rec = self.handles['rec'].product() event.gen = self.mchandles['gen'].product() # if refselFun is given, this function is applied to select reconstructed objects # to be used as a reference refselFun = None if hasattr( self.cfg_ana, 'refselFun'): refselFun = self.cfg_ana.refselFun if refselFun is not None: event.refsel = [ PhysicsObject(obj) for obj in event.rec if refselFun(obj)] else: event.refsel = event.gen # if recselfun is given, this function is applied to select reconstructed objects # for which we want to measure the efficiency w/r to the reference recselFun = None if hasattr( self.cfg_ana, 'recselFun'): recselFun = self.cfg_ana.recselFun if recselFun is not None: if recselFun == 'trigObjs': event.recsel = selTriggerObjects( event.triggerObjects, event.hltPath, self.filterForPath( event.hltPath )) else: event.recsel = [ PhysicsObject(obj) for obj in event.rec if recselFun(obj)] else: event.recsel = event.rec # selecting gen objects genpdgid = self.cfg_ana.genPdgId event.gensel = [] for obj in event.gen: # print obj.pdgId() if abs(obj.pdgId())!=genpdgid: continue if self.cfg_ana.genTrigMatch and \ not self.trigMatched( obj, event): continue event.gensel.append( obj ) if len(event.gensel ) == 0: return False # gen objects matched to a reference lepton # DON'T NEED THIS MATCHING IF NO REFSEL event.genmatchedRef = event.gen if event.refsel is not None: pairs = matchObjectCollection( event.gensel, event.refsel, 0.1) event.genmatchedRef = [ gen for gen,ref in pairs.iteritems() if ref is not None] # and gen objects wich are in addition matched to a # selected lepton pairs = matchObjectCollection( event.genmatchedRef, event.recsel, 0.1) event.genmatched = [ gen for gen,rec in pairs.iteritems() if rec is not None] # reweighting OOTPU in chamonix samples to the OOTPU observed in Fall11 samples weight = 1 if self.cfg_comp.name.find('Chamonix')!=-1: weight = ootPUReweighter.getWeight( event.pusi[1].nPU(), event.pusi[2].nPU()) for space in self.phaseSpaces: space.denomHistos.fillParticles( event.genmatchedRef, event, weight) space.numHistos.fillParticles( event.genmatched, event, weight) # space.counter.inc('passed') self.counters.counter( self.name ).inc( 'All particles', len(event.genmatchedRef) ) self.counters.counter( self.name ).inc( 'Passing particles', len(event.genmatched) )
def process(self, iEvent, event): self.readCollections( iEvent ) cmgJets = self.handles['jets'].product() allJets = [] event.jets = [] event.bJets = [] event.cleanJets = [] event.cleanBJets = [] leptons = event.selectedLeptons 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 genJets: # Use DeltaR = 0.25 matching like JetMET pairs = matchObjectCollection( [jet], genJets, 0.25*0.25) if pairs[jet] is None: pass #jet.genJet = None else: jet.genJet = pairs[jet] # print jet, jet.genJet #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.cleanJets)<2: return True return True