def process(self, iEvent, event): self.readCollections(iEvent) self.counters.counter('jets').inc('all events') event.selectedGenJets = filter(self.testJet, event.genJets) # Could have a better lepton rejection at gen level.. event.cleanGenJets, dummy = cleanObjectCollection( event.selectedGenJets, masks=event.leptons, deltaRMin=0.5) def match(jet, objects, name): bm, dr2 = bestMatch(jet, objects) if bm: bm.dr = math.sqrt(dr2) setattr(jet, name, bm) for jet in event.cleanGenJets: if hasattr(event, 'recJets'): match(jet, event.recJets, 'rec') if jet.rec: response = jet.rec.pt() / jet.pt() ## if response>0.98 and response<1.2: ## print '-'*50 ## print jet.rec ## pfconstituents = jet.rec.getPFConstituents() ## for pfc in pfconstituents: ## print pfc.pt(), pfc.pdgId() match(jet, event.simJets, 'sim') match(jet, event.genParticles3, 'genPtc3') return True
def process (self, iEvent, event) : #read all the handles defined beforehand self.readCollections (iEvent) jetEtaCut = 4.5 # get the vertexes event.vertices = self.handles['vertices'].product () # self.h_nvtx.Fill (len (event.vertices)) # get the jets in the jets variable jets = self.handles['jets'].product () # filter jets with some selections event.jets = [ jet for jet in jets if ( abs(jet.eta()) < jetEtaCut and jet.pt()>self.cfg_ana.ptCut and self.isPFLoose(jet) ) ] # get status 2 leptons if 'genParticlesPruned' in self.mchandles: event.genLeptons = [ lep for lep in self.mchandles['genParticlesPruned'].product() if lep.status() == 2 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ] else: event.genLeptons = [ lep for lep in self.mchandles['genParticles'].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ] # @ Pasquale: why level 3 and not level 2? # event.selGenLeptons = [GenParticle (lep) for lep in event.genLeptons if (lep.pt ()>self.cfg_ana.ptCut and abs (lep.eta ()) < jetEtaCut)] # get genJets event.genJets = map (GenJet, self.mchandles['genJets'].product ()) # filter genjets as for reco jets event.selGenJets = [GenJet (jet) for jet in event.genJets if (jet.pt ()>self.cfg_ana.genPtCut)] #FIXME why are there cases in which there's 4 or 6 leptons? if len (event.genLeptons) != 2 : return # in case I want to filter out taus # 11, 13, 15 : e, u, T # event.genOneLepton = [GenParticle (part) for part in event.genLeptons if abs (part.pdgId ()) == 15] # remove leptons from jets if closer than 0.2 event.cleanJets = cleanObjectCollection (event.jets, event.genLeptons, 0.2) event.matchingCleanJets = matchObjectCollection2 (event.cleanJets, event.selGenJets, 0.25) # assign to each jet its gen match (easy life :)) for jet in event.cleanJets : jet.gen = event.matchingCleanJets[ jet ] event.matchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen != None] for jet in event.matchedCleanJets: self.myntuple.Fill (jet.gen.pt (), jet.pt (), jet.gen.eta (), jet.eta (), jet.gen.phi (), jet.phi (), len (event.vertices))
def process(self, iEvent, event): self.readCollections(iEvent) self.counters.counter('jets').inc('all events') event.selectedGenJets = filter(self.testJet, event.genJets) event.cleanGenJets, dummy = cleanObjectCollection( event.selectedGenJets, masks=event.genLeptons3, deltaRMin=0.5) def match(jet, objects, name): bm, dr2 = bestMatch(jet, objects) if bm: bm.dr = math.sqrt(dr2) setattr(jet, name, bm) for jet in event.cleanGenJets: match(jet, event.genParticles3, 'genPtc3') return True
def process(self, iEvent, event): self.readCollections( iEvent ) self.counters.counter('jets').inc('all events') event.selectedGenJets = filter(self.testJet, event.genJets) event.cleanGenJets, dummy = cleanObjectCollection( event.selectedGenJets, masks = event.genLeptons3, deltaRMin = 0.5 ) def match(jet, objects, name): bm, dr2 = bestMatch(jet, objects) if bm: bm.dr = math.sqrt(dr2) setattr(jet, name, bm) for jet in event.cleanGenJets: match(jet, event.genParticles3, 'genPtc3') return True
def process(self, iEvent, event): self.readCollections( iEvent ) self.counters.counter('jets').inc('all events') event.selectedGenJets = filter(self.testJet, event.genJets) # Could have a better lepton rejection at gen level.. event.cleanGenJets, dummy = cleanObjectCollection( event.selectedGenJets, masks = event.leptons, deltaRMin = 0.5 ) def match(jet, objects, name): bm, dr2 = bestMatch(jet, objects) if bm: bm.dr = math.sqrt(dr2) setattr(jet, name, bm) for jet in event.cleanGenJets: if hasattr(event, 'recJets'): match(jet, event.recJets, 'rec') if jet.rec: response = jet.rec.pt()/jet.pt() ## if response>0.98 and response<1.2: ## print '-'*50 ## print jet.rec ## pfconstituents = jet.rec.getPFConstituents() ## for pfc in pfconstituents: ## print pfc.pt(), pfc.pdgId() match(jet, event.simJets, 'sim') match(jet, event.genParticles3, 'genPtc3') return True
def process(self, iEvent, event): # read all the handles defined beforehand self.readCollections(iEvent) jetEtaCut = 4.5 # get the vertexes event.vertices = self.handles["vertices"].product() self.h_nvtx.Fill(len(event.vertices)) event.vertexBin = int(len(event.vertices)) # get the jets in the jets variable jets = self.handles["jets"].product() # filter jets with some selections event.jets = [ jet for jet in jets if (abs(jet.eta()) < jetEtaCut and jet.pt() > self.cfg_ana.ptCut and self.isPFLoose(jet)) ] self.jetHistos.fillEvent(event.jets) # get status 2 leptons if "genParticlesPruned" in self.mchandles: event.genLeptons = [ lep for lep in self.mchandles["genParticlesPruned"].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ] else: event.genLeptons = [ lep for lep in self.mchandles["genParticles"].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ] # @ Pasquale: why level 3 and not level 2? # event.selGenLeptons = [GenParticle (lep) for lep in event.genLeptons if (lep.pt ()>self.cfg_ana.ptCut and abs (lep.eta ()) < jetEtaCut)] # get genJets event.genJets = map(GenJet, self.mchandles["genJets"].product()) # filter genjets as for reco jets event.myGenJets = [GenJet(jet) for jet in event.genJets if (jet.pt() > self.cfg_ana.genPtCut)] event.selGenJets = cleanObjectCollection(event.myGenJets, event.genLeptons, 0.2) # event.selGenJets = event.genJets for jet in event.selGenJets: self.h_genjetspt.Fill(jet.pt()) self.h_genjetspt2.Fill(jet.pt()) if abs(jet.eta()) < 1.4: self.h_genjetspt_barrel.Fill(jet.pt()) elif 1.6 < abs(jet.eta()) < 2.5: self.h_genjetspt_endtk.Fill(jet.pt()) elif 2.6 < abs(jet.eta()) < 2.9: self.h_genjetspt_endNOtk.Fill(jet.pt()) elif 3.1 < abs(jet.eta()): self.h_genjetspt_fwd.Fill(jet.pt()) event.noNegJets = [jet for jet in event.jets if (jet.jecFactor(0) > 0)] # first stats plots # print 'genLeptons : ' + repr (len (event.genLeptons)) + ' | genJets : ' + repr (len (event.genJets)) + ' | recoJets : ' + repr (len (event.jets)) self.jetHistos.fillStats(len(event.selGenJets), len(event.noNegJets)) # FIXME why are there cases in which there's 4 or 6 leptons? if len(event.genLeptons) > 2: return # in case I want to filter out taus # 11, 13, 15 : e, u, T # event.genOneLepton = [GenParticle (part) for part in event.genLeptons if abs (part.pdgId ()) == 15] # remove leptons from jets if closer than 0.2 event.cleanJets = cleanObjectCollection(event.noNegJets, event.genLeptons, 0.2) self.cleanJetHistos.fillEvent(event.cleanJets) for jet in event.cleanJets: if abs(jet.eta()) < 1.4: self.cleanJetHistos_barrel.fillJet(jet) elif 1.6 < abs(jet.eta()) < 2.5: self.cleanJetHistos_endtk.fillJet(jet) elif 2.6 < abs(jet.eta()) < 2.9: self.cleanJetHistos_endNOtk.fillJet(jet) elif 3.1 < abs(jet.eta()): self.cleanJetHistos_fwd.fillJet(jet) # print len (jets),len (event.jets), len (event.noNegJets), len (event.cleanJets), len (event.genLeptons),"-->",(len (event.noNegJets) - len (event.cleanJets) - len (event.genLeptons)) event.matchingCleanJets = matchObjectCollection2(event.cleanJets, event.selGenJets, 0.25) # assign to each jet its gen match (easy life :)) for jet in event.cleanJets: jet.gen = event.matchingCleanJets[jet] # FIXME next step might be to put this in the matching and remove the boolean flags self.cleanJetHistos.fillEvent(event.cleanJets) event.matchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen != None] event.cleanGluJets = [] event.cleanQuarkJets = [] for jet in event.matchedCleanJets: flav = abs(jet.partonFlavour()) if flav == 21: event.cleanGluJets.append(jet) elif flav > 0 and flav <= 3: event.cleanQuarkJets.append(jet) event.LPtmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen != None and jet.pt() <= 30] event.HPtmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen != None and jet.pt() > 30] self.matchedCleanJetHistos.fillEvent(event.matchedCleanJets) self.LPtmatchedCleanJetHistos.fillEvent(event.LPtmatchedCleanJets) self.HPtmatchedCleanJetHistos.fillEvent(event.HPtmatchedCleanJets) event.unmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen == None] event.LPtunmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen == None and jet.pt() <= 30] event.HPtunmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen == None and jet.pt() > 30] self.unmatchedCleanJetHistos.fillEvent(event.unmatchedCleanJets) self.LPtUnmatchedCleanJetHistos.fillEvent(event.LPtunmatchedCleanJets) self.HPtUnmatchedCleanJetHistos.fillEvent(event.HPtunmatchedCleanJets) self.matchedCleanJetHistosComponents.fillEvent(event.matchedCleanJets) self.unmatchedCleanJetHistosComponents.fillEvent(event.unmatchedCleanJets) self.matchedCleanJetHistosResolution.fillEvent(event.matchedCleanJets, len(event.vertices)) for jet in event.matchedCleanJets: if abs(jet.gen.eta()) < 1.4: self.matchedCleanJetHistosResolution_barrel.fillJet(jet, len(event.vertices)) self.matchedCleanJetHistos_barrel.fillJet(jet) elif 1.6 < abs(jet.gen.eta()) < 2.5: self.matchedCleanJetHistosResolution_endtk.fillJet(jet, len(event.vertices)) self.matchedCleanJetHistos_endtk.fillJet(jet) elif 2.6 < abs(jet.gen.eta()) < 2.9: self.matchedCleanJetHistosResolution_endNOtk.fillJet(jet, len(event.vertices)) self.matchedCleanJetHistos_endNOtk.fillJet(jet) elif 3.1 < abs(jet.gen.eta()): self.matchedCleanJetHistosResolution_fwd.fillJet(jet, len(event.vertices)) self.matchedCleanJetHistos_fwd.fillJet(jet) # PG debugging for tails # for jet in event.matchedCleanJets : # minDelta = 10 # secondClosest = jet # for recojet in event.cleanJets : # if recojet == jet : # continue # dr2 = deltaR2( jet.gen.eta (), jet.gen.phi (), recojet.eta (), recojet.phi ()) # if dr2 < minDelta : # minDelta = dr2 # secondClosest = recojet # if len(event.vertices) < 10 or abs (jet.gen.eta ()) < 1.6: continue # self.h_secondClosestVsPtratio.Fill (jet.pt () / jet.gen.pt (), math.sqrt (minDelta)) # #if (jet.pt () / jet.gen.pt () < 0.2) : # #print '------------' # #print jet.pt (), jet.eta (), jet.phi () # #print jet.gen.pt (), jet.gen.eta (), jet.gen.phi () # #print 'second reco closest to gen at distance', minDelta # aveDeltaR = 0 # num = 0 # for recojet1 in event.cleanJets : # minDelta = 10 # closest = recojet1 # for recojet2 in event.cleanJets : # if recojet1 == recojet2 : continue # dr2 = deltaR2( recojet1.eta (), recojet1.phi (), recojet2.eta (), recojet2.phi ()) # if dr2 < minDelta : # minDelta = dr2 # closest = recojet2 # if minDelta == 10 continue ; # aveDeltaR = aveDeltaR + math.sqrt (minDelta) # num = num + 1 # if num > 0 : # aveDeltaR = aveDeltaR / num # self.h_avedistanceVSNvtx.Fill (len(event.vertices), aveDeltaR) # AB: fill eta-dependent responses (in bins of gen pt) for jet in event.matchedCleanJets: if abs(jet.gen.pt()) < 20.0: self.matchedCleanJetHistosResolution_PtL.fillJet(jet, len(event.vertices)) self.matchedCleanJetHistos_PtL.fillJet(jet) elif 20.0 < abs(jet.gen.pt()) < 40.0: self.matchedCleanJetHistosResolution_PtM.fillJet(jet, len(event.vertices)) self.matchedCleanJetHistos_PtM.fillJet(jet) elif 40.0 < abs(jet.gen.pt()) < 80.0: self.matchedCleanJetHistosResolution_PtH.fillJet(jet, len(event.vertices)) self.matchedCleanJetHistos_PtH.fillJet(jet) elif 80.0 < abs(jet.gen.pt()): self.matchedCleanJetHistosResolution_PtV.fillJet(jet, len(event.vertices)) self.matchedCleanJetHistos_PtV.fillJet(jet) if self.doJetIdHisto: self.gluCleanHistosId.fillEvent(event.cleanGluJets, event.vertices) self.quarkCleanHistosId.fillEvent(event.cleanQuarkJets, event.vertices) ### self.matchedCleanHistosId.fillEvent(event.matchedCleanJets,event.vertices) self.reweiMatchedCleanHistosId.fillEvent(event.matchedCleanJets, event.vertices) self.unmatchedCleanHistosId.fillEvent(event.unmatchedCleanJets, event.vertices)
def process (self, iEvent, event) : #read all the handles defined beforehand self.readCollections (iEvent) jetEtaCut = 4.5 # get the vertexes event.vertices = self.handles['vertices'].product () self.h_nvtx.Fill (len (event.vertices)) event.vertexBin = int (len (event.vertices)) # get the jets in the jets variable jets = self.handles['jets'].product () # filter jets with some selections event.jets = [ jet for jet in jets if ( abs(jet.eta()) < jetEtaCut and jet.pt()>self.cfg_ana.ptCut and self.isPFLoose(jet) ) ] self.jetHistos.fillEvent (event.jets) try: # get status 2 leptons if 'leptons2' in self.mchandles: event.genLeptons = map (GenParticle, self.mchandles['leptons2'].product ()) else: event.genLeptons = [ lep for lep in self.mchandles['genParticles'].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ] except: event.genLeptons = None if event.genLeptons: #FIXME why are there cases in which there's 4 or 6 leptons? if len (event.genLeptons) != 2 : return # in case I want to filter out taus # 11, 13, 15 : e, u, T # remove leptons from jets if closer than 0.2 event.cleanJets = cleanObjectCollection (event.jets, event.genLeptons, 0.2) else: event.cleanJets = event.jets ### event.matchingCleanJets = matchObjectCollection2 (event.cleanJets, event.selGenJets, 0.25) # assign to each jet its gen match (easy life :)) event.selGenJets = [] for jet in event.cleanJets : try: jet.gen = jet.genJet() jet.gen.pt() event.selGenJets.append(jet.gen) except: jet.gen = None for jet in event.selGenJets : self.h_genjetspt.Fill (jet.pt ()) self.jetHistos.fillStats (len (event.selGenJets), len (event.jets)) ### try: ### # get genJets ### event.genJets = map (GenJet, self.mchandles['genJets'].product ()) ### event.selGenJets = event.genJets ### for jet in event.selGenJets : ### self.h_genjetspt.Fill (jet.pt ()) ### ### # first stats plots ### self.jetHistos.fillStats (len (event.selGenJets), len (event.jets)) ### except: ### pass ## run the PileupJetIdAlgo and attach the id to the jet ijet = 0 for jet in event.cleanJets: try: jet.puIdentifier = self.puidalgo.computeIdVariables(jet.sourcePtr().get(),0.,event.vertices[0],self.runMva) except: jet.puIdentifier = self.puidalgo.computeIdVariables(jet,0.,event.vertices[0],self.runMva) if self.cfg_ana.dumpTree: ## self.puidalgo.fillJet(jet.puIdentifier,ijet,0) self.puidalgo.setIJetIEvent(ijet,0) self.treevars.nvtx = len(event.vertices) self.treevars.isMatched = False self.treevars.jetFlavour = -999 self.treevars.genPt = 0. self.treevars.partonPt = 0. self.treevars.genDr = -100. if jet.gen: self.treevars.isMatched = True self.treevars.jetFlavour = jet.partonFlavour() self.treevars.genPt = jet.gen.pt() self.treevars.genDr = deltaR(jet.gen.eta(),jet.gen.phi(),jet.eta(),jet.phi()) try: self.treevars.partonPt = jet.genParton.pt() except: pass self.tree.Fill() ijet += 1 self.cleanJetHistos.fillEvent (event.cleanJets) event.matchedCleanJets = [jet for jet in event.cleanJets if jet.gen != None] event.unmatchedCleanJets = [jet for jet in event.cleanJets if jet.gen == None] self.matchedCleanJetHistos.fillEvent (event.matchedCleanJets) self.unmatchedCleanJetHistos.fillEvent (event.unmatchedCleanJets) event.cleanGluJets = [] event.cleanQuarkJets = [] vtxbin = findBin(self.vtxBinLabels,len(event.vertices)) for jet in event.matchedCleanJets: flav = abs(jet.partonFlavour()) if flav == 21: event.cleanGluJets.append(jet) elif flav > 0 and flav <= 3: event.cleanQuarkJets.append(jet) jet.weight = self.reweight[1](getattr(jet,self.reweight[0])()) etabin = findBin(self.etaBins,jet.eta()) ### self.jetKin[vtxbin][etabin].fillJet(jet) if self.cfg_ana.doJetIdHisto: self.gluCleanHistosId.fillEvent(event.cleanGluJets,event.vertices) self.quarkCleanHistosId.fillEvent(event.cleanQuarkJets,event.vertices) ### self.matchedCleanHistosId.fillEvent(event.matchedCleanJets,event.vertices) self.reweiMatchedCleanHistosId.fillEvent(event.matchedCleanJets,event.vertices) self.unmatchedCleanHistosId.fillEvent(event.unmatchedCleanJets,event.vertices)
def process(self, iEvent, event): #read all the handles defined beforehand self.readCollections(iEvent) # print '-------' jetEtaCut = 4.5 event.vertices = self.handles['vertices'].product() self.h_NVTXnum.Fill(len(event.vertices)) YeCHSjets = self.handles['YeCHSjets'].product() event.YeCHSjets = [ jet for jet in YeCHSjets if (abs(jet.eta()) < jetEtaCut and jet.pt() > self.cfg_ana.ptCut and self.isPFLoose(jet)) ] NoCHSjets = self.handles['NoCHSjets'].product() event.NoCHSjets = [ jet for jet in NoCHSjets if (abs(jet.eta()) < jetEtaCut and jet.pt() > self.cfg_ana.ptCut and self.isPFLoose(jet)) ] # get status 2 leptons if 'genParticlesPruned' in self.mchandles: event.genLeptons = [ lep for lep in self.mchandles['genParticlesPruned'].product() if lep.status() == 2 and (abs(lep.pdgId()) == 11 or abs( lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ] else: event.genLeptons = [ lep for lep in self.mchandles['genParticles'].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs( lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ] event.NoCHSgenJets = map(GenJet, self.mchandles['NoCHSgenJets'].product()) event.myNoCHSGenJets = [ GenJet(jet) for jet in event.NoCHSgenJets if (jet.pt() > self.cfg_ana.genPtCut) ] event.selNoCHSGenJets = cleanObjectCollection(event.myNoCHSGenJets, event.genLeptons, 0.2) event.YeCHSgenJets = map(GenJet, self.mchandles['YeCHSgenJets'].product()) event.myYeCHSGenJets = [ GenJet(jet) for jet in event.YeCHSgenJets if (jet.pt() > self.cfg_ana.genPtCut) ] event.selYeCHSGenJets = cleanObjectCollection(event.myYeCHSGenJets, event.genLeptons, 0.2) self.h_NoCHS_genjetsnum.Fill(len(event.selNoCHSGenJets)) if len(event.genLeptons) > 2: return for jet in event.selNoCHSGenJets: self.h_NoCHS_genjetspt.Fill(jet.pt()) self.h_NoCHS_genjetseta.Fill(jet.eta()) for jet in event.selYeCHSGenJets: self.h_YeCHS_genjetspt.Fill(jet.pt()) self.h_YeCHS_genjetseta.Fill(jet.eta()) event.cleanYeCHSJets = cleanObjectCollection(event.YeCHSjets, event.genLeptons, 0.2) event.cleanNoCHSJets = cleanObjectCollection(event.NoCHSjets, event.genLeptons, 0.2) for jet in event.cleanYeCHSJets: self.h_YeCHS_recjetspt.Fill(jet.pt()) self.h_YeCHS_recjetseta.Fill(jet.eta()) # if (abs(jet.pt () > 20) and len(event.vertices) > 10): # self.h_YeCHS_correction.Fill (jet.eta (), 1. / jet.jecFactor(0)) ; # print 'Ev', event.iEv, 'YeCHS ', round (jet.eta (), 2), round (jet.phi (), 2), round (jet.pt () * jet.jecFactor(0), 2)#, round (jet.component (1).fraction (), 2) for jet in event.cleanNoCHSJets: self.h_NoCHS_recjetspt.Fill(jet.pt()) self.h_NoCHS_recjetseta.Fill(jet.eta()) # if (abs(jet.pt () > 20) and len(event.vertices) > 10): # self.h_NoCHS_correction.Fill (jet.eta (), 1. / jet.jecFactor(0)) ; # print 'Ev', event.iEv, 'NoCHS ', round (jet.eta (), 2), round (jet.phi (), 2), round (jet.pt () * jet.jecFactor(0), 2)#, round (jet.component (1).fraction (), 2) #PG removing negative correction jets event.noNegCleanYeCHSJets = [ jet for jet in event.cleanYeCHSJets if (jet.jecFactor(0) > 0) ] event.noNegCleanNoCHSJets = [ jet for jet in event.cleanNoCHSJets if (jet.jecFactor(0) > 0) ] #PG matching between CHS and non CHS event.YeNoCHSmatch = matchObjectCollection2(event.noNegCleanYeCHSJets, event.noNegCleanNoCHSJets, 0.1) for yejet, nojet in event.YeNoCHSmatch.iteritems(): if nojet == None: continue self.YeNoCHSRatio_eta.Fill( yejet.eta(), yejet.pt() * yejet.jecFactor(0) / (nojet.pt() * nojet.jecFactor(0))) self.h_NoCHS_correction.Fill(nojet.eta(), 1. / nojet.jecFactor(0)) self.h_YeCHS_correction.Fill(yejet.eta(), 1. / yejet.jecFactor(0)) if len(event.vertices) > 8 and len(event.vertices) <= 10: self.YeNoCHSRatio_eta_PUcut.Fill( yejet.eta(), yejet.pt() * yejet.jecFactor(0) / (nojet.pt() * nojet.jecFactor(0))) self.h_NoCHS_correction_PUcut.Fill(nojet.eta(), 1. / nojet.jecFactor(0)) self.h_YeCHS_correction_PUcut.Fill(yejet.eta(), 1. / yejet.jecFactor(0)) if nojet.pt() < 40 or nojet.pt() > 60: continue self.YeNoCHSRatio_eta_ptcut.Fill( yejet.eta(), yejet.pt() * yejet.jecFactor(0) / (nojet.pt() * nojet.jecFactor(0))) self.h_NoCHS_correction_ptcut.Fill(nojet.eta(), 1. / nojet.jecFactor(0)) self.h_YeCHS_correction_ptcut.Fill(yejet.eta(), 1. / yejet.jecFactor(0)) if len(event.vertices) < 8 or len(event.vertices) > 10: continue self.YeNoCHSRatio_eta_ptcut_PUcut.Fill( yejet.eta(), yejet.pt() * yejet.jecFactor(0) / (nojet.pt() * nojet.jecFactor(0))) self.h_NoCHS_correction_ptcut_PUcut.Fill(nojet.eta(), 1. / nojet.jecFactor(0)) self.h_YeCHS_correction_ptcut_PUcut.Fill(yejet.eta(), 1. / yejet.jecFactor(0)) # if yejet.pt () * yejet.jecFactor(0) < 10: # continue ; # if abs (yejet.eta ()) < 3: # continue ; # print round (yejet.eta (), 2), '\t', round (yejet.pt () * yejet.jecFactor(0), 2), '\t',round (nojet.pt () * nojet.jecFactor(0), 2), '\t',round (yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0)), 2) # print round (yejet.eta (), 2), '\t', round (yejet.pt (), 2), '\t',round (nojet.pt (), 2), '\t',round (yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0)), 2) event.matchingCleanYeCHSJets = matchObjectCollection2( event.cleanYeCHSJets, event.selYeCHSGenJets, 0.25) for jet in event.cleanYeCHSJets: jet.gen = event.matchingCleanYeCHSJets[jet] event.matchedCleanYeCHSJets = [ jet for jet in event.matchingCleanYeCHSJets if jet.gen != None ] for jet in event.matchedCleanYeCHSJets: self.h_YeCHS_recjetspt_match.Fill(jet.pt()) self.h_YeCHS_recjetseta_match.Fill(jet.eta()) self.h_YeCHS_genjetspt_match.Fill(jet.gen.pt()) self.h_YeCHS_genjetseta_match.Fill(jet.gen.eta()) event.matchingCleanNoCHSJets = matchObjectCollection2( event.cleanNoCHSJets, event.selNoCHSGenJets, 0.25) for jet in event.cleanNoCHSJets: jet.gen = event.matchingCleanNoCHSJets[jet] event.matchedCleanNoCHSJets = [ jet for jet in event.matchingCleanNoCHSJets if jet.gen != None ] for jet in event.matchedCleanNoCHSJets: self.h_NoCHS_recjetspt_match.Fill(jet.pt()) self.h_NoCHS_recjetseta_match.Fill(jet.eta()) self.h_NoCHS_genjetspt_match.Fill(jet.gen.pt()) self.h_NoCHS_genjetseta_match.Fill(jet.gen.eta()) if len(event.vertices) != 10: return for jet in event.matchedCleanNoCHSJets: if (jet.gen.pt() < 20 or jet.gen.pt() > 30 or abs(jet.gen.eta()) > 1.4): continue self.h_NoCHS_response.Fill( (jet.pt() - jet.gen.pt()) / jet.gen.pt()) for jet in event.matchedCleanYeCHSJets: if (jet.gen.pt() < 20 or jet.gen.pt() > 30 or abs(jet.gen.eta()) > 1.4): continue self.h_YeCHS_response.Fill( (jet.pt() - jet.gen.pt()) / jet.gen.pt())
def process(self, iEvent, event): # print 'process ongoing!' # import pdb; pdb.set_trace() # import pdb; pdb.set_trace() self.readCollections(iEvent) self.counters.counter('EMT').inc('all events') event.muoncand = self.buildLooseLeptons(self.handles['muons'].product(), event) event.electroncand = self.buildLooseOtherLeptons(self.handles['electrons'].product(), event) event.taucand = self.buildLooseTau(self.handles['taus'].product(), event) cmgJets = self.handles['jets'].product() event.CSVjet = [] for cmgJet in cmgJets: jet = Jet( cmgJet ) if self.testVetoBJet(jet): event.CSVjet.append(jet) event.electroncand, dummpy = cleanObjectCollection(event.electroncand, masks = event.muoncand, deltaRMin = 0.5) # CSV veto electroncand_removebjet = [] muoncand_removebjet = [] for ielectron in event.electroncand: bm, dr2min = bestMatch(ielectron, event.CSVjet) if dr2min > 0.25: electroncand_removebjet.append(ielectron) for imuon in event.muoncand: bm, dr2min = bestMatch(imuon, event.CSVjet) if dr2min > 0.25: muoncand_removebjet.append(imuon) event.electroncand = electroncand_removebjet event.muoncand = muoncand_removebjet # event.flag_trigmatched = False # # if not event.flag_trigmatched: # return False # event.cleanelectron = [] # event.cleanmuon = [] for ii in event.electroncand: ii.flag_id = self.eid(ii) ii.flag_iso = self.eiso(ii) ii.trig_match = True # if self.triggerCheck(event, event.hltPaths, ii): # ii.trig_match = True # # for jj in event.muoncand: # if self.returnMass(jj, ii) > 20. and \ # ii.charge()*jj.charge()==1. and \ # self.returnDR(ii, jj) > 0.5: # # flag_add = True # # if flag_add: # ii.flag_id = self.eid(ii) # ii.flag_iso = self.eiso(ii) # event.cleanelectron.append(ii) # # # for ii in event.muoncand: ii.flag_id = self.muid(ii) ii.flag_iso = self.muiso(ii) ii.trig_match = True # if self.triggerCheck(event, event.hltPaths, ii): # ii.trig_match = True # continue # # for jj in event.electroncand: # if self.returnMass(jj, ii) > 20. and \ # ii.charge()*jj.charge()==1. and \ # self.returnDR(ii, jj) > 0.5: # # flag_add = True # # if flag_add: # ii.flag_id = self.muid(ii) # ii.flag_iso = self.muiso(ii) # event.cleanmuon.append(ii) # event.electroncand = event.cleanelectron # event.muoncand = event.cleanmuon # idiso_electron = [ie for ie in event.electroncand if self.eid(ie) and self.eiso(ie)] # idiso_muon = [im for im in event.muoncand if self.muid(im) and self.muiso(im)] # if idiso_electron[0].pt() > idiso_muon[0].pt(): # if not (len(event.muoncand)>=1 and len(event.electroncand)>=1 and len(event.taucand)>=1): # print 'YCheck : (m,e,t) = ', len(event.muoncand), len(event.electroncand), len(event.taucand) # return False # lepton1 = [] # Leading lepton # lepton2 = [] # 2nd leading lepton # if not (len(id_electron)>=1 and len(id_muon)>=1): # return False # lepton_type = '' # # if id_electron[0].pt() > id_muon[0].pt(): #e-mu # lepton1 = [ie for ie in id_electron if ie.pt() > 20.] # lepton2 = [im for im in id_muon if im.pt() > 10.] # lepton_type = 'electron' # elif id_electron[0].pt() < id_muon[0].pt(): # lepton1 = [im for im in id_muon if im.pt() > 20.] # lepton2 = [ie for ie in id_electron if ie.pt() > 10.] # lepton_type = 'muon' # import pdb; pdb.set_trace() # if not (len(lepton1)==1 and len(lepton2)==1): # return False # self.counters.counter('EMT').inc('1mu + 1e') # # # event.muon = '' # event.electron = '' # # if lepton_type=='muon': # event.muon = lepton1[0] # event.electron = lepton2[0] # elif lepton_type=='electron': # event.electron = lepton1[0] # event.muon = lepton2[0] event.loosetau = [] for itau in event.taucand: itau.decaymode = itau.decayMode() itau.ep = itau.calcEOverP() itau.flag_iso = self.tauiso(itau) itau.flag_id = self.tauid(itau) itau.againstERaw = itau.tauID('againstElectronMVA3raw') itau.againstE2Raw = itau.tauID('againstElectronMVA2raw') itau.againstE0Raw = itau.tauID('againstElectronMVA') itau.againstECat = int(round(itau.tauID('againstElectronMVA3category'))) itau.againstE2Cat = int(round(itau.tauID('againstElectronMVA2category'))) # itau.againstE0Cat = int(round(itau.tauID('againstElectronMVAcategory'))) itau.againstELooseArmin = itau.tauID("againstElectronLoose") itau.againstETight = itau.tauID("againstElectronTightMVA3") itau.againstELoose = itau.tauID("againstElectronLooseMVA3") itau.againstEMedium = itau.tauID("againstElectronMediumMVA3") itau.againstE2Loose = itau.tauID("againstElectronLooseMVA2") itau.againstE2Medium = itau.tauID("againstElectronMediumMVA2") # itau.againstE0Loose = itau.tauID("againstElectronLooseMVA") # itau.againstE0Medium = itau.tauID("againstElectronMediumMVA") itau.againstMuLoose = itau.tauID("againstMuonLoose") itau.againstMuTight = itau.tauID("againstMuonTight") itau.dBisolation = itau.tauID("byCombinedIsolationDeltaBetaCorrRaw3Hits") itau.mvaisolation = itau.tauID("byRawIsoMVA") itau.mvaisolation_loose = itau.tauID('byLooseIsoMVA') # print 'dB, raw, loose', itau.tauID("byCombinedIsolationDeltaBetaCorrRaw3Hits"), itau.tauID("byRawIsoMVA"), itau.tauID('byLooseIsoMVA') # print 'ID_check', itau.tauID("againstMuonLoose"), itau.tauID("againstElectronLooseMVA3") # print 'mu_loose, e_loose, e_medium', itau.tauID("againstMuonLoose"), itau.tauID("againstElectronLooseMVA3"), itau.tauID("againstElectronMediumMVA3"), itau.flag_id # if flag_mu_mass and and \ # ((itau.decayMode()==0 and itau.calcEOverP() > 0.2) or (itau.decayMode()!=0)): # itau.flag_id = True # # # if flag_e_mass==False and flag_mu_mass==False and self.tauid(itau): # itau.flag_id = True # flag_e_overlap = False # flag_e_mass = False # # for ii in idiso_electron: # mass_et = self.returnMass(ii, itau) # if mass_et > 71.2 and mass_et < 111.2: # flag_e_mass = True # # if self.returnDR(itau, ii) < 0.5: # flag_e_overlap = True # # if flag_e_overlap: # continue # # # flag_mu_overlap = False # flag_mu_mass = False # # for ii in idiso_muon: # mass_mt = self.returnMass(ii, itau) # if mass_mt > 71.2 and mass_mt < 111.2: # flag_mu_mass = True # # if self.returnDR(itau, ii) < 0.5: # flag_mu_overlap = True # # if flag_mu_overlap: # continue # if self.tauiso(itau): # itau.flag_iso = True # # # if flag_e_mass and itau.tauID("againstElectronMediumMVA3"): # itau.flag_id = True # # # if flag_mu_mass and itau.tauID("againstMuonTight") and \ # ((itau.decayMode()==0 and itau.calcEOverP() > 0.2) or (itau.decayMode()!=0)): # itau.flag_id = True # # # if flag_e_mass==False and flag_mu_mass==False and self.tauid(itau): # itau.flag_id = True event.loosetau.append(itau) event.taucand = event.loosetau # Additional tau veto event.vetotaucand = self.buildVetoTau(self.handles['taus'].product(), event) event.vetomuoncand = self.buildVetoLeptons(self.handles['muons'].product(), event) event.vetoelectroncand = self.buildVetoOtherLeptons(self.handles['electrons'].product(), event) flag_sscharge = False for im in event.muoncand: for ie in event.electroncand: if im.charge()*ie.charge()==1: flag_sscharge = True self.counters.counter('EMT').inc('step1') if flag_sscharge==False: return False self.counters.counter('EMT').inc('step2') # if not (len(event.taucand)>=1 and len(event.muoncand)>=1 and len(event.electroncand)>=1): if not (len(event.muoncand)>=1 and len(event.electroncand)>=1): return False self.counters.counter('EMT').inc('step3') # idiso_tau = [it for it in event.taucand if (it.flag_id and it.flag_iso)] # if not len(idiso_tau)>=1 : # return False # if not len(lepton3) == 1: # return False # self.counters.counter('EMT').inc('1 e/mu/tau') # event.tau = lepton3[0] # event.M_l2t = self.returnMass(lepton2[0], event.tau) # if self.returnMass(event.muon, event.electron) < 20.: # return False # if self.returnMass(lepton2[0], event.tau) < 20.: # return False # charge requirement # SS for two light leptons # if event.electron.charge()*event.muon.charge()==-1.: # return False # if event.tau.charge()*event.muon.charge()!=-1.: # return False # dR separation # if self.returnDR(event.tau, event.muon) < 0.5: # return False # if self.returnDR(event.tau, event.electron) < 0.5: # return False # if self.returnDR(event.electron, event.muon) < 0.5: # return False # event.loosetaucand, dummpy = cleanObjectCollection(event.loosetaucand, # masks = [event.muon], ## masks = event.muoncand, # deltaRMin = 0.4) # # event.loosetaucand, dummpy = cleanObjectCollection(event.loosetaucand, # masks = [event.electron], ## masks = event.electroncand, # deltaRMin = 0.4) # # event.loosetaucand, dummpy = cleanObjectCollection(event.loosetaucand, # masks = [event.tau], # deltaRMin = 0.4) # # # event.loosemuoncand, dummpy = cleanObjectCollection(event.loosemuoncand, # masks = [event.muon], # deltaRMin = 0.4) # # event.loosemuoncand, dummpy = cleanObjectCollection(event.loosemuoncand, # masks = [event.electron], # deltaRMin = 0.4) # # event.loosemuoncand, dummpy = cleanObjectCollection(event.loosemuoncand, # masks = [event.tau], # deltaRMin = 0.4) # # event.looseelectroncand, dummpy = cleanObjectCollection(event.looseelectroncand, # masks = [event.muon], # deltaRMin = 0.4) # # event.looseelectroncand, dummpy = cleanObjectCollection(event.looseelectroncand, # masks = [event.electron], # deltaRMin = 0.4) # # event.looseelectroncand, dummpy = cleanObjectCollection(event.looseelectroncand, # masks = [event.tau], # deltaRMin = 0.4) # NadditionalLepton = len(event.loosetaucand) + len(event.loosemuoncand) + len(event.looseelectroncand) # if NadditionalLepton>=1: # return False print 'All events passed : ', event.run, event.lumi, event.eventId return True
def selectionSequence(self, event, fillCounter, leg1IsoCut=None, leg2IsoCut=None): if fillCounter: self.counters.counter('DiLepton').inc('all events') # if not self.triggerList.triggerPassed(event.triggerObject): # return False # self.counters.counter('DiLepton').inc('trigger passed ') # if event.eventId == 155035: # import pdb; pdb.set_trace() if len(event.diLeptons) == 0: return False if fillCounter: self.counters.counter('DiLepton').inc('> 0 di-lepton') # testing di-lepton itself selDiLeptons = event.diLeptons # selDiLeptons = self.selectDiLeptons( selDiLeptons ) if not self.leptonAccept( event.leptons ): return False if fillCounter: self.counters.counter('DiLepton').inc('lepton accept') if len(self.cfg_comp.triggers)>0: # trigger matching leg1 selDiLeptons = [diL for diL in selDiLeptons if \ self.trigMatched(event, diL.leg1(), 'leg1')] if len(selDiLeptons) == 0: event.l1TrigMatched=False if hasattr(self.cfg_ana,'HCP_matching'): return False else: if fillCounter: self.counters.counter('DiLepton').inc('leg1 trig matched') event.l1TrigMatched=True if len(self.cfg_comp.triggers)>0: # trigger matching leg2 selDiLeptons = [diL for diL in selDiLeptons if \ self.trigMatched(event, diL.leg2(), 'leg2')] if len(selDiLeptons) == 0: event.l2TrigMatched=False if hasattr(self.cfg_ana,'HCP_matching'): return False else: if fillCounter: self.counters.counter('DiLepton').inc('leg2 trig matched') event.l2TrigMatched=True if len(self.cfg_comp.triggers)>0 and len(self.cfg_ana.triggerMap[ event.hltPath ])>2: # trigger matching jet cmgJets = self.handles['jets'].product() jets=[] for cmgJet in cmgJets: jet = Jet( cmgJet ) if self.testJet( jet ): jets.append(jet) selDiLeptonsNew=[] for diL in selDiLeptons: cleanJets, dummy = cleanObjectCollection( jets, masks = [ diL.leg1(), diL.leg2() ], deltaRMin = 0.5 ) if len(cleanJets)>0 and self.trigMatched(event, cleanJets[0], 'jet'): selDiLeptonsNew+=[diL] selDiLeptons=selDiLeptonsNew if len(selDiLeptons) == 0: event.jetTrigMatched=False if hasattr(self.cfg_ana,'HCP_matching'): return False else: if fillCounter: self.counters.counter('DiLepton').inc('jet trig matched') event.jetTrigMatched=True event.diLeptonsTrigMatched = selDiLeptons # testing leg1 selDiLeptons = [ diL for diL in selDiLeptons if \ self.testLeg1( diL.leg1(), leg1IsoCut ) ] if len(selDiLeptons) == 0: return False else: if fillCounter: self.counters.counter('DiLepton').inc('leg1 offline cuts passed') # testing leg2 selDiLeptons = [ diL for diL in selDiLeptons if \ self.testLeg2( diL.leg2(), leg2IsoCut ) ] if len(selDiLeptons) == 0: return False else: if fillCounter: self.counters.counter('DiLepton').inc('leg2 offline cuts passed') # mass cut selDiLeptons = [ diL for diL in selDiLeptons if \ self.testMass(diL) ] if len(selDiLeptons)==0: return False else: if fillCounter: self.counters.counter('DiLepton').inc( '{min:3.1f} < m < {max:3.1f}'.format( min = self.cfg_ana.m_min, max = self.cfg_ana.m_max ) ) # exactly one? if len(selDiLeptons)==0: return False elif len(selDiLeptons)==1: if fillCounter: self.counters.counter('DiLepton').inc('exactly 1 di-lepton') event.diLepton = self.bestDiLepton( selDiLeptons ) event.leg1 = event.diLepton.leg1() event.leg2 = event.diLepton.leg2() return True
def selectionSequence(self, event, fillCounter, leg1IsoCut=None, leg2IsoCut=None): if fillCounter: self.counters.counter('DiLepton').inc('all events') if len(event.diLeptons) == 0: return False if fillCounter: self.counters.counter('DiLepton').inc('> 0 di-lepton') # testing di-lepton itself selDiLeptons = event.diLeptons if not self.leptonAccept(event.leptons): return False if fillCounter: self.counters.counter('DiLepton').inc('lepton accept') if not hasattr(event, 'hltPaths'): event.hltPaths = [] #import pdb ; pdb.set_trace() matching = {} for trig in event.hltPaths: matching.update({trig: [-99, -99, -99]}) # {trigName:leg1,leg2,jet} event.diLeptonsTrigMatched = [] for trig in event.hltPaths: if self.cfg_comp.isEmbed: continue ## no matching for the embed selDiLeptons = event.diLeptons if len(self.cfg_comp.triggers) > 0: # trigger matching leg1 selDiLeptons = [ diL for diL in selDiLeptons if self.trigMatched(event, diL.leg1(), 'leg1', trig) ] if len(selDiLeptons) == 0: matching[trig][0] = 0 else: if fillCounter: self.counters.counter('DiLepton').inc( 'leg1 trig matched') matching[trig][0] = 1 if len(self.cfg_comp.triggers) > 0: # trigger matching leg2 selDiLeptons = [ diL for diL in selDiLeptons if self.trigMatched(event, diL.leg2(), 'leg2', trig) ] if len(selDiLeptons) == 0: matching[trig][1] = 0 else: if fillCounter: self.counters.counter('DiLepton').inc( 'leg2 trig matched') matching[trig][1] = 1 if len(self.cfg_comp.triggers) > 0 and len( self.cfg_ana.triggerMap[trig]) > 2: # trigger matching jet cmgJets = self.handles['jets'].product() jets = [] for cmgJet in cmgJets: jet = Jet(cmgJet) if self.testJet(jet): jets.append(jet) selDiLeptonsNew = [] for diL in selDiLeptons: cleanJets, dummy = cleanObjectCollection( jets, masks=[diL.leg1(), diL.leg2()], deltaRMin=0.5) if len(cleanJets) > 0 and self.trigMatched( event, cleanJets[0], 'jet', trig): selDiLeptonsNew += [diL] selDiLeptons = selDiLeptonsNew if len(selDiLeptons) == 0: matching[trig][2] = 0 else: if fillCounter: self.counters.counter('DiLepton').inc( 'jet trig matched') matching[trig][2] = 1 event.diLeptonsTrigMatched += selDiLeptons event.diLeptonsTrigMatched = set(event.diLeptonsTrigMatched) ### need unix style wild card to macth different trigger versions in data for trig in matching.keys(): if fnm(trig, 'HLT_DoubleMediumIsoPFTau35_Trk*_eta2p1_v*'): event.l1TrigMatched_diTau = matching[trig][0] event.l2TrigMatched_diTau = matching[trig][1] if fnm(trig, 'HLT_DoubleMediumIsoPFTau*_Trk*_eta2p1_Jet30_v*'): event.l1TrigMatched_diTauJet = matching[trig][0] event.l2TrigMatched_diTauJet = matching[trig][1] event.jetTrigMatched_diTauJet = matching[trig][2] # testing leg1 selDiLeptons = [ diL for diL in selDiLeptons if self.testLeg(diL.leg1()) ] if len(selDiLeptons) == 0: return False else: if fillCounter: self.counters.counter('DiLepton').inc( 'leg1 offline cuts passed') # testing leg2 selDiLeptons = [ diL for diL in selDiLeptons if self.testLeg(diL.leg2()) ] if len(selDiLeptons) == 0: return False else: if fillCounter: self.counters.counter('DiLepton').inc( 'leg2 offline cuts passed') # mass cut selDiLeptons = [diL for diL in selDiLeptons if self.testMass(diL)] if len(selDiLeptons) == 0: return False else: if fillCounter: self.counters.counter('DiLepton').inc( '{min:3.1f} < m < {max:3.1f}'.format( min=self.cfg_ana.m_min, max=self.cfg_ana.m_max)) # exactly one? if len(selDiLeptons) == 0: return False elif len(selDiLeptons) == 1: if fillCounter: self.counters.counter('DiLepton').inc('exactly 1 di-lepton') event.diLepton = self.bestDiLepton(selDiLeptons) event.leg1 = event.diLepton.leg1() event.leg2 = event.diLepton.leg2() # match with L1 particles, whether Central Jets or Taus L1Taus = self.handles['L1JetsTau'].product() L1Jets = self.handles['L1JetsCentral'].product() L1dR1T, L1dR2T, index1T, index2T = self.match(event.diLepton, L1Taus) L1dR1J, L1dR2J, index1J, index2J = self.match(event.diLepton, L1Jets) if L1dR1T < L1dR1J and L1dR1T <= 0.5: if L1Taus[index1T].pt() > 44. and abs(L1Taus[index1T].eta()) < 2.1: event.leg1.L1particle = L1Taus[index1T] if L1dR1J < L1dR1T and L1dR1J <= 0.5: if L1Jets[index1J].pt() > 64.: event.leg1.L1particle = L1Jets[index1J] if L1dR2T < L1dR2J and L1dR2T <= 0.5: if L1Taus[index2T].pt() > 44. and abs(L1Taus[index2T].eta()) < 2.1: event.leg2.L1particle = L1Taus[index2T] if L1dR2J < L1dR2T and L1dR2J <= 0.5: if L1Jets[index2J].pt() > 64.: event.leg2.L1particle = L1Jets[index2J] ### require trigger bit in Embedded RecHit if self.cfg_comp.isEmbed: #if len(event.hltPath)==0 : return False if not event.hltPath: return False #import pdb ; pdb.set_trace() 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 = 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
def selectionSequence(self, event, fillCounter, leg1IsoCut=None, leg2IsoCut=None): if fillCounter: self.counters.counter('DiLepton').inc('all events') if len(event.diLeptons) == 0: return False if fillCounter: self.counters.counter('DiLepton').inc('> 0 di-lepton') # testing di-lepton itself selDiLeptons = event.diLeptons if not self.leptonAccept( event.leptons ): return False if fillCounter: self.counters.counter('DiLepton').inc('lepton accept') ## for embedded no hltPaths (for now) if not hasattr( event, 'hltPaths'): event.hltPaths = [] matching = {} for trig in event.hltPaths : matching.update({trig:[-99,-99,-99]}) # {trigName:leg1,leg2,jet} event.diLeptonsTrigMatched = [] for trig in event.hltPaths : if self.cfg_comp.isEmbed : continue ## no matching for the embed selDiLeptons = event.diLeptons if len(self.cfg_comp.triggers)>0: # trigger matching leg1 selDiLeptons = [diL for diL in selDiLeptons if self.trigMatched(event, diL.leg1(), 'leg1', trig)] if len(selDiLeptons) == 0: matching[trig][0]=0 else: if fillCounter: self.counters.counter('DiLepton').inc('leg1 trig matched') matching[trig][0]=1 if len(self.cfg_comp.triggers)>0: # trigger matching leg2 selDiLeptons = [diL for diL in selDiLeptons if self.trigMatched(event, diL.leg2(), 'leg2', trig)] if len(selDiLeptons) == 0: matching[trig][1]=0 else: if fillCounter: self.counters.counter('DiLepton').inc('leg2 trig matched') matching[trig][1]=1 if len(self.cfg_comp.triggers)>0 and len(self.cfg_ana.triggerMap[ trig ])>2: # trigger matching jet cmgJets = self.handles['jets'].product() jets=[] for cmgJet in cmgJets: jet = Jet( cmgJet ) if self.testJet( jet ): jets.append(jet) selDiLeptonsNew=[] for diL in selDiLeptons: cleanJets, dummy = cleanObjectCollection( jets, masks = [ diL.leg1(), diL.leg2() ], deltaRMin = 0.5 ) if len(cleanJets)>0 and self.trigMatched(event, cleanJets[0], 'jet', trig): selDiLeptonsNew += [diL] selDiLeptons = selDiLeptonsNew if len(selDiLeptons) == 0: matching[trig][2]=0 else: if fillCounter: self.counters.counter('DiLepton').inc('jet trig matched') matching[trig][2]=1 event.diLeptonsTrigMatched += selDiLeptons event.diLeptonsTrigMatched = set(event.diLeptonsTrigMatched) ### need unix style wild card to macth different trigger versions in data for trig in matching.keys() : if fnm(trig,'HLT_DoubleMediumIsoPFTau35_Trk*_eta2p1_v*') : event.l1TrigMatched_diTau = matching[trig][0] event.l2TrigMatched_diTau = matching[trig][1] if fnm(trig,'HLT_DoubleMediumIsoPFTau*_Trk*_eta2p1_Jet30_v*') : event.l1TrigMatched_diTauJet = matching[trig][0] event.l2TrigMatched_diTauJet = matching[trig][1] event.jetTrigMatched_diTauJet = matching[trig][2] # testing leg1 selDiLeptons = [ diL for diL in selDiLeptons if self.testLeg( diL.leg1() ) ] if len(selDiLeptons) == 0: return False else: if fillCounter: self.counters.counter('DiLepton').inc('leg1 offline cuts passed') # testing leg2 selDiLeptons = [ diL for diL in selDiLeptons if self.testLeg( diL.leg2() ) ] if len(selDiLeptons) == 0: return False else: if fillCounter: self.counters.counter('DiLepton').inc('leg2 offline cuts passed') # mass cut selDiLeptons = [ diL for diL in selDiLeptons if self.testMass(diL) ] if len(selDiLeptons)==0: return False else: if fillCounter: self.counters.counter('DiLepton').inc('{min:3.1f} < m < {max:3.1f}'.format( min = self.cfg_ana.m_min, max = self.cfg_ana.m_max )) # exactly one? if len(selDiLeptons)==0: return False elif len(selDiLeptons)==1: if fillCounter: self.counters.counter('DiLepton').inc('exactly 1 di-lepton') event.diLepton = self.bestDiLepton( selDiLeptons ) event.leg1 = event.diLepton.leg1() event.leg2 = event.diLepton.leg2() ### require trigger bit in Embedded RecHit if self.cfg_comp.isEmbed : if not event.hltPath : return False if "DY" in self.cfg_comp.name or "Higgs" in self.cfg_comp.name or self.cfg_comp.isEmbed: if event.leg1.decayMode() == 0 : event.leg1.prongWeight = 0.88 else : event.leg1.prongWeight = 1. if event.leg2.decayMode() == 0 : event.leg2.prongWeight = 0.88 else : event.leg2.prongWeight = 1. #import pdb ; pdb.set_trace() return True
def selectionSequence(self, event, fillCounter, leg1IsoCut=None, leg2IsoCut=None): if fillCounter: self.counters.counter('DiLepton').inc('all events') if len(event.diLeptons) == 0: return False if fillCounter: self.counters.counter('DiLepton').inc('> 0 di-lepton') # testing di-lepton itself selDiLeptons = event.diLeptons if not self.leptonAccept( event.leptons ): return False if fillCounter: self.counters.counter('DiLepton').inc('lepton accept') if not hasattr( event, 'hltPaths'): event.hltPaths = [] #import pdb ; pdb.set_trace() matching = {} for trig in event.hltPaths : matching.update({trig:[-99,-99,-99]}) # {trigName:leg1,leg2,jet} event.diLeptonsTrigMatched = [] for trig in event.hltPaths : if self.cfg_comp.isEmbed : continue ## no matching for the embed selDiLeptons = event.diLeptons if len(self.cfg_comp.triggers)>0: # trigger matching leg1 selDiLeptons = [diL for diL in selDiLeptons if self.trigMatched(event, diL.leg1(), 'leg1', trig)] if len(selDiLeptons) == 0: matching[trig][0]=0 else: if fillCounter: self.counters.counter('DiLepton').inc('leg1 trig matched') matching[trig][0]=1 if len(self.cfg_comp.triggers)>0: # trigger matching leg2 selDiLeptons = [diL for diL in selDiLeptons if self.trigMatched(event, diL.leg2(), 'leg2', trig)] if len(selDiLeptons) == 0: matching[trig][1]=0 else: if fillCounter: self.counters.counter('DiLepton').inc('leg2 trig matched') matching[trig][1]=1 if len(self.cfg_comp.triggers)>0 and len(self.cfg_ana.triggerMap[ trig ])>2: # trigger matching jet cmgJets = self.handles['jets'].product() jets=[] for cmgJet in cmgJets: jet = Jet( cmgJet ) if self.testJet( jet ): jets.append(jet) selDiLeptonsNew=[] for diL in selDiLeptons: cleanJets, dummy = cleanObjectCollection( jets, masks = [ diL.leg1(), diL.leg2() ], deltaRMin = 0.5 ) if len(cleanJets)>0 and self.trigMatched(event, cleanJets[0], 'jet', trig): selDiLeptonsNew += [diL] selDiLeptons = selDiLeptonsNew if len(selDiLeptons) == 0: matching[trig][2]=0 else: if fillCounter: self.counters.counter('DiLepton').inc('jet trig matched') matching[trig][2]=1 event.diLeptonsTrigMatched += selDiLeptons event.diLeptonsTrigMatched = set(event.diLeptonsTrigMatched) ### need unix style wild card to macth different trigger versions in data for trig in matching.keys() : if fnm(trig,'HLT_DoubleMediumIsoPFTau35_Trk*_eta2p1_v*') : event.l1TrigMatched_diTau = matching[trig][0] event.l2TrigMatched_diTau = matching[trig][1] if fnm(trig,'HLT_DoubleMediumIsoPFTau*_Trk*_eta2p1_Jet30_v*') : event.l1TrigMatched_diTauJet = matching[trig][0] event.l2TrigMatched_diTauJet = matching[trig][1] event.jetTrigMatched_diTauJet = matching[trig][2] # testing leg1 selDiLeptons = [ diL for diL in selDiLeptons if self.testLeg( diL.leg1() ) ] if len(selDiLeptons) == 0: return False else: if fillCounter: self.counters.counter('DiLepton').inc('leg1 offline cuts passed') # testing leg2 selDiLeptons = [ diL for diL in selDiLeptons if self.testLeg( diL.leg2() ) ] if len(selDiLeptons) == 0: return False else: if fillCounter: self.counters.counter('DiLepton').inc('leg2 offline cuts passed') # mass cut selDiLeptons = [ diL for diL in selDiLeptons if self.testMass(diL) ] if len(selDiLeptons)==0: return False else: if fillCounter: self.counters.counter('DiLepton').inc('{min:3.1f} < m < {max:3.1f}'.format( min = self.cfg_ana.m_min, max = self.cfg_ana.m_max )) # exactly one? if len(selDiLeptons)==0: return False elif len(selDiLeptons)==1: if fillCounter: self.counters.counter('DiLepton').inc('exactly 1 di-lepton') event.diLepton = self.bestDiLepton( selDiLeptons ) event.leg1 = event.diLepton.leg1() event.leg2 = event.diLepton.leg2() # match with L1 particles, whether Central Jets or Taus L1Taus = self.handles['L1JetsTau'].product() L1Jets = self.handles['L1JetsCentral'].product() L1dR1T, L1dR2T, index1T, index2T = self.match(event.diLepton, L1Taus) L1dR1J, L1dR2J, index1J, index2J = self.match(event.diLepton, L1Jets) if L1dR1T < L1dR1J and L1dR1T<=0.5 : if L1Taus[index1T].pt()>44. and abs(L1Taus[index1T].eta())<2.1 : event.leg1.L1particle = L1Taus[index1T] if L1dR1J < L1dR1T and L1dR1J<=0.5 : if L1Jets[index1J].pt()>64. : event.leg1.L1particle = L1Jets[index1J] if L1dR2T < L1dR2J and L1dR2T<=0.5 : if L1Taus[index2T].pt()>44. and abs(L1Taus[index2T].eta())<2.1 : event.leg2.L1particle = L1Taus[index2T] if L1dR2J < L1dR2T and L1dR2J<=0.5 : if L1Jets[index2J].pt()>64. : event.leg2.L1particle = L1Jets[index2J] ### require trigger bit in Embedded RecHit if self.cfg_comp.isEmbed : #if len(event.hltPath)==0 : return False if not event.hltPath : return False #import pdb ; pdb.set_trace() return True
def selectionSequence(self, event, fillCounter, leg1IsoCut=None, leg2IsoCut=None): if fillCounter: self.counters.counter('DiLepton').inc('all events') if len(event.diLeptons) == 0: return False if fillCounter: self.counters.counter('DiLepton').inc('> 0 di-lepton') # testing di-lepton itself selDiLeptons = event.diLeptons if not self.leptonAccept(event.leptons): return False if fillCounter: self.counters.counter('DiLepton').inc('lepton accept') ## for embedded no hltPaths (for now) if not hasattr(event, 'hltPaths'): event.hltPaths = [] matching = {} for trig in event.hltPaths: matching.update({trig: [-99, -99, -99]}) # {trigName:leg1,leg2,jet} event.diLeptonsTrigMatched = [] for trig in event.hltPaths: if self.cfg_comp.isEmbed: continue ## no matching for the embed selDiLeptons = event.diLeptons if len(self.cfg_comp.triggers) > 0: # trigger matching leg1 selDiLeptons = [ diL for diL in selDiLeptons if self.trigMatched(event, diL.leg1(), 'leg1', trig) ] if len(selDiLeptons) == 0: matching[trig][0] = 0 else: if fillCounter: self.counters.counter('DiLepton').inc( 'leg1 trig matched') matching[trig][0] = 1 if len(self.cfg_comp.triggers) > 0: # trigger matching leg2 selDiLeptons = [ diL for diL in selDiLeptons if self.trigMatched(event, diL.leg2(), 'leg2', trig) ] if len(selDiLeptons) == 0: matching[trig][1] = 0 else: if fillCounter: self.counters.counter('DiLepton').inc( 'leg2 trig matched') matching[trig][1] = 1 if len(self.cfg_comp.triggers) > 0 and len( self.cfg_ana.triggerMap[trig]) > 2: # trigger matching jet cmgJets = self.handles['jets'].product() jets = [] for cmgJet in cmgJets: jet = Jet(cmgJet) if self.testJet(jet): jets.append(jet) selDiLeptonsNew = [] for diL in selDiLeptons: cleanJets, dummy = cleanObjectCollection( jets, masks=[diL.leg1(), diL.leg2()], deltaRMin=0.5) if len(cleanJets) > 0 and self.trigMatched( event, cleanJets[0], 'jet', trig): selDiLeptonsNew += [diL] selDiLeptons = selDiLeptonsNew if len(selDiLeptons) == 0: matching[trig][2] = 0 else: if fillCounter: self.counters.counter('DiLepton').inc( 'jet trig matched') matching[trig][2] = 1 event.diLeptonsTrigMatched += selDiLeptons event.diLeptonsTrigMatched = set(event.diLeptonsTrigMatched) ### need unix style wild card to macth different trigger versions in data for trig in matching.keys(): if fnm(trig, 'HLT_DoubleMediumIsoPFTau35_Trk*_eta2p1_v*'): event.l1TrigMatched_diTau = matching[trig][0] event.l2TrigMatched_diTau = matching[trig][1] if fnm(trig, 'HLT_DoubleMediumIsoPFTau*_Trk*_eta2p1_Jet30_v*'): event.l1TrigMatched_diTauJet = matching[trig][0] event.l2TrigMatched_diTauJet = matching[trig][1] event.jetTrigMatched_diTauJet = matching[trig][2] # testing leg1 selDiLeptons = [ diL for diL in selDiLeptons if self.testLeg(diL.leg1()) ] if len(selDiLeptons) == 0: return False else: if fillCounter: self.counters.counter('DiLepton').inc( 'leg1 offline cuts passed') # testing leg2 selDiLeptons = [ diL for diL in selDiLeptons if self.testLeg(diL.leg2()) ] if len(selDiLeptons) == 0: return False else: if fillCounter: self.counters.counter('DiLepton').inc( 'leg2 offline cuts passed') # mass cut selDiLeptons = [diL for diL in selDiLeptons if self.testMass(diL)] if len(selDiLeptons) == 0: return False else: if fillCounter: self.counters.counter('DiLepton').inc( '{min:3.1f} < m < {max:3.1f}'.format( min=self.cfg_ana.m_min, max=self.cfg_ana.m_max)) # exactly one? if len(selDiLeptons) == 0: return False elif len(selDiLeptons) == 1: if fillCounter: self.counters.counter('DiLepton').inc('exactly 1 di-lepton') event.diLepton = self.bestDiLepton(selDiLeptons) event.leg1 = event.diLepton.leg1() event.leg2 = event.diLepton.leg2() ### require trigger bit in Embedded RecHit if self.cfg_comp.isEmbed: if not event.hltPath: return False if "DY" in self.cfg_comp.name or "Higgs" in self.cfg_comp.name or self.cfg_comp.isEmbed: if event.leg1.decayMode() == 0: event.leg1.prongWeight = 0.88 else: event.leg1.prongWeight = 1. if event.leg2.decayMode() == 0: event.leg2.prongWeight = 0.88 else: event.leg2.prongWeight = 1. #import pdb ; pdb.set_trace() return True
def process(self, iEvent, event): self.readCollections(iEvent) self.counters.counter('MMT').inc('all events') event.muoncand = self.buildLooseLeptons (self.handles['muons' ].product(), event) event.electroncand = self.buildLooseOtherLeptons(self.handles['electrons'].product(), event) event.taucand = self.buildLooseTau (self.handles['taus' ].product(), event) cmgJets = self.handles['jets'].product() # fill the bjet collection event.CSVjet = [] for cmgJet in cmgJets: jet = Jet( cmgJet ) if self.testVetoBJet(jet): event.CSVjet.append(jet) # clean the electron collection from muons event.electroncand, dummpy = cleanObjectCollection(event.electroncand, masks = event.muoncand, deltaRMin = 0.5) # CSV veto electroncand_removebjet = [] muoncand_removebjet = [] # clean the electrons from bjets for ielectron in event.electroncand: bm, dr2min = bestMatch(ielectron, event.CSVjet) if dr2min > 0.25: electroncand_removebjet.append(ielectron) # clean the muons from bjets for imuon in event.muoncand: bm, dr2min = bestMatch(imuon, event.CSVjet) if dr2min > 0.25: muoncand_removebjet.append(imuon) event.electroncand = electroncand_removebjet event.muoncand = muoncand_removebjet for ii in event.electroncand: ii.flag_id = self.eid(ii) ii.flag_iso = self.eiso(ii) ii.trig_match = True # trigger matching temporarily disabled for ii in event.muoncand: ii.flag_id = self.muid(ii) ii.flag_iso = self.muiso(ii) ii.trig_match = True # trigger matching temporarily disabled event.loosetau = [] for itau in event.taucand: itau.decaymode = itau.decayMode() itau.ep = itau.calcEOverP() itau.flag_iso = self.tauiso(itau) itau.flag_id = self.tauid(itau) itau.againstERaw = itau.tauID('againstElectronMVA3raw') itau.againstE2Raw = itau.tauID('againstElectronMVA2raw') itau.againstE0Raw = itau.tauID('againstElectronMVA') itau.againstECat = int(round(itau.tauID('againstElectronMVA3category'))) itau.againstE2Cat = int(round(itau.tauID('againstElectronMVA2category'))) itau.againstE0Cat = int(round(itau.tauID('againstElectronMVAcategory'))) itau.againstELooseArmin = itau.tauID("againstElectronLoose") itau.againstETight = itau.tauID("againstElectronTightMVA3") itau.againstELoose = itau.tauID("againstElectronLooseMVA3") itau.againstEMedium = itau.tauID("againstElectronMediumMVA3") itau.againstE2Loose = itau.tauID("againstElectronLooseMVA2") itau.againstE2Medium = itau.tauID("againstElectronMediumMVA2") itau.againstE0Loose = itau.tauID("againstElectronLooseMVA") itau.againstE0Medium = itau.tauID("againstElectronMediumMVA") itau.againstMuLoose = itau.tauID("againstMuonLoose") itau.againstMuTight = itau.tauID("againstMuonTight") itau.dBisolation = itau.tauID("byCombinedIsolationDeltaBetaCorrRaw3Hits") itau.mvaisolation = itau.tauID("byRawIsoMVA") itau.mvaisolation_loose = itau.tauID('byLooseIsoMVA') event.loosetau.append(itau) event.taucand = event.loosetau # Additional tau veto event.vetotaucand = self.buildVetoTau(self.handles['taus'].product(), event) event.vetomuoncand = self.buildVetoLeptons(self.handles['muons'].product(), event) event.vetoelectroncand = self.buildVetoOtherLeptons(self.handles['electrons'].product(), event) flag_sscharge = False for im in event.muoncand: for ie in event.electroncand: if im.charge()*ie.charge()==1: flag_sscharge = True self.counters.counter('MMT').inc('step1') if flag_sscharge==False: return False self.counters.counter('MMT').inc('step2') if not (len(event.muoncand)>=1 and len(event.electroncand)>=1): return False self.counters.counter('MMT').inc('step3') print 'All events passed : ', event.run, event.lumi, event.eventId return True
def process(self, iEvent, event): #read all the handles defined beforehand self.readCollections(iEvent) jetEtaCut = 4.5 # get the vertexes event.vertices = self.handles['vertices'].product() self.h_nvtx.Fill(len(event.vertices)) event.vertexBin = int(len(event.vertices)) # get the jets in the jets variable jets = self.handles['jets'].product() # filter jets with some selections event.jets = [ jet for jet in jets if (abs(jet.eta()) < jetEtaCut and jet.pt() > self.cfg_ana.ptCut and self.isPFLoose(jet)) ] self.jetHistos.fillEvent(event.jets) try: # get status 2 leptons if 'leptons2' in self.mchandles: event.genLeptons = map(GenParticle, self.mchandles['leptons2'].product()) else: event.genLeptons = [ lep for lep in self.mchandles['genParticles'].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs( lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ] except: event.genLeptons = None if event.genLeptons: #FIXME why are there cases in which there's 4 or 6 leptons? if len(event.genLeptons) != 2: return # in case I want to filter out taus # 11, 13, 15 : e, u, T # remove leptons from jets if closer than 0.2 event.cleanJets = cleanObjectCollection(event.jets, event.genLeptons, 0.2) else: event.cleanJets = event.jets ### event.matchingCleanJets = matchObjectCollection2 (event.cleanJets, event.selGenJets, 0.25) # assign to each jet its gen match (easy life :)) event.selGenJets = [] for jet in event.cleanJets: try: jet.gen = jet.genJet() jet.gen.pt() event.selGenJets.append(jet.gen) except: jet.gen = None for jet in event.selGenJets: self.h_genjetspt.Fill(jet.pt()) self.jetHistos.fillStats(len(event.selGenJets), len(event.jets)) ### try: ### # get genJets ### event.genJets = map (GenJet, self.mchandles['genJets'].product ()) ### event.selGenJets = event.genJets ### for jet in event.selGenJets : ### self.h_genjetspt.Fill (jet.pt ()) ### ### # first stats plots ### self.jetHistos.fillStats (len (event.selGenJets), len (event.jets)) ### except: ### pass ## run the PileupJetIdAlgo and attach the id to the jet ijet = 0 for jet in event.cleanJets: try: jet.puIdentifier = self.puidalgo.computeIdVariables( jet.sourcePtr().get(), 0., event.vertices[0], self.runMva) except: jet.puIdentifier = self.puidalgo.computeIdVariables( jet, 0., event.vertices[0], self.runMva) if self.cfg_ana.dumpTree: ## self.puidalgo.fillJet(jet.puIdentifier,ijet,0) self.puidalgo.setIJetIEvent(ijet, 0) self.treevars.nvtx = len(event.vertices) self.treevars.isMatched = False self.treevars.jetFlavour = -999 self.treevars.genPt = 0. self.treevars.partonPt = 0. self.treevars.genDr = -100. if jet.gen: self.treevars.isMatched = True self.treevars.jetFlavour = jet.partonFlavour() self.treevars.genPt = jet.gen.pt() self.treevars.genDr = deltaR(jet.gen.eta(), jet.gen.phi(), jet.eta(), jet.phi()) try: self.treevars.partonPt = jet.genParton.pt() except: pass self.tree.Fill() ijet += 1 self.cleanJetHistos.fillEvent(event.cleanJets) event.matchedCleanJets = [ jet for jet in event.cleanJets if jet.gen != None ] event.unmatchedCleanJets = [ jet for jet in event.cleanJets if jet.gen == None ] self.matchedCleanJetHistos.fillEvent(event.matchedCleanJets) self.unmatchedCleanJetHistos.fillEvent(event.unmatchedCleanJets) event.cleanGluJets = [] event.cleanQuarkJets = [] vtxbin = findBin(self.vtxBinLabels, len(event.vertices)) for jet in event.matchedCleanJets: flav = abs(jet.partonFlavour()) if flav == 21: event.cleanGluJets.append(jet) elif flav > 0 and flav <= 3: event.cleanQuarkJets.append(jet) jet.weight = self.reweight[1](getattr(jet, self.reweight[0])()) etabin = findBin(self.etaBins, jet.eta()) ### self.jetKin[vtxbin][etabin].fillJet(jet) if self.cfg_ana.doJetIdHisto: self.gluCleanHistosId.fillEvent(event.cleanGluJets, event.vertices) self.quarkCleanHistosId.fillEvent(event.cleanQuarkJets, event.vertices) ### self.matchedCleanHistosId.fillEvent(event.matchedCleanJets,event.vertices) self.reweiMatchedCleanHistosId.fillEvent(event.matchedCleanJets, event.vertices) self.unmatchedCleanHistosId.fillEvent(event.unmatchedCleanJets, event.vertices)
def process (self, iEvent, event) : #read all the handles defined beforehand self.readCollections (iEvent) jetEtaCut = 4.5 # get the vertexes event.vertices = self.handles['vertices'].product () self.h_nvtx.Fill (len (event.vertices)) event.vertexBin = int (len (event.vertices)) # get the jets in the jets variable jets = self.handles['jets'].product () # filter jets with some selections event.jets = [ jet for jet in jets if ( abs(jet.eta()) < jetEtaCut and jet.pt()>self.cfg_ana.ptCut and self.isPFLoose(jet) ) ] self.jetHistos.fillEvent (event.jets) # get status 2 leptons if 'genParticlesPruned' in self.mchandles: event.genLeptons = [ lep for lep in self.mchandles['genParticlesPruned'].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ] else: event.genLeptons = [ lep for lep in self.mchandles['genParticles'].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ] # @ Pasquale: why level 3 and not level 2? # event.selGenLeptons = [GenParticle (lep) for lep in event.genLeptons if (lep.pt ()>self.cfg_ana.ptCut and abs (lep.eta ()) < jetEtaCut)] # get genJets event.genJets = map (GenJet, self.mchandles['genJets'].product ()) # filter genjets as for reco jets event.myGenJets = [GenJet (jet) for jet in event.genJets if (jet.pt ()>self.cfg_ana.genPtCut)] event.selGenJets = cleanObjectCollection (event.myGenJets, event.genLeptons, 0.2) # event.selGenJets = event.genJets for jet in event.selGenJets : self.h_genjetspt.Fill (jet.pt ()) event.noNegJets = [ jet for jet in event.jets if (jet.jecFactor(0) > 0) ] # event.noNegJets = [ jet for jet in event.jets] # first stats plots # print 'genLeptons : ' + repr (len (event.genLeptons)) + ' | genJets : ' + repr (len (event.genJets)) + ' | recoJets : ' + repr (len (event.jets)) self.jetHistos.fillStats (len (event.selGenJets), len (event.noNegJets)) #FIXME why are there cases in which there's 4 or 6 leptons? if len (event.genLeptons) > 2 : return # in case I want to filter out taus # 11, 13, 15 : e, u, T # event.genOneLepton = [GenParticle (part) for part in event.genLeptons if abs (part.pdgId ()) == 15] # remove leptons from jets if closer than 0.2 event.cleanJets = cleanObjectCollection (event.noNegJets, event.genLeptons, 0.2) # event.cleanJets = event.noNegJets self.cleanJetHistos.fillEvent (event.cleanJets) # print len (jets),len (event.jets), len (event.noNegJets), len (event.cleanJets), len (event.genLeptons),"-->",(len (event.noNegJets) - len (event.cleanJets) - len (event.genLeptons)) event.matchingCleanJets = matchObjectCollection2 (event.cleanJets, event.selGenJets, 0.25) # assign to each jet its gen match (easy life :)) for jet in event.cleanJets : jet.gen = event.matchingCleanJets[ jet ] # FIXME next step might be to put this in the matching and remove the boolean flags event.matchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen != None] event.cleanGluJets = [] event.cleanQuarkJets = [] for jet in event.matchedCleanJets: flav = abs(jet.partonFlavour()) if flav == 21: event.cleanGluJets.append(jet) elif flav > 0 and flav <= 3: event.cleanQuarkJets.append(jet) event.LPtmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen != None and jet.pt () <= 30] event.HPtmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen != None and jet.pt () > 30] self.matchedCleanJetHistos.fillEvent (event.matchedCleanJets) self.LPtmatchedCleanJetHistos.fillEvent (event.LPtmatchedCleanJets) self.HPtmatchedCleanJetHistos.fillEvent (event.HPtmatchedCleanJets) event.unmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen == None] event.LPtunmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen == None and jet.pt () <= 30] event.HPtunmatchedCleanJets = [jet for jet in event.matchingCleanJets if jet.gen == None and jet.pt () > 30] self.unmatchedCleanJetHistos.fillEvent (event.unmatchedCleanJets) self.LPtUnmatchedCleanJetHistos.fillEvent (event.LPtunmatchedCleanJets) self.HPtUnmatchedCleanJetHistos.fillEvent (event.HPtunmatchedCleanJets) self.matchedCleanJetHistosComponents.fillEvent (event.matchedCleanJets) self.unmatchedCleanJetHistosComponents.fillEvent (event.unmatchedCleanJets) self.matchedCleanJetHistosResolution.fillEvent (event.matchedCleanJets, len (event.vertices)) for jet in event.matchedCleanJets : if abs (jet.gen.eta ()) < 1.4 : self.matchedCleanJetHistosResolution_barrel.fillJet (jet, len (event.vertices)) self.matchedCleanJetHistos_barrel.fillJet (jet) elif 1.6 < abs (jet.gen.eta ()) < 2.5 : self.matchedCleanJetHistosResolution_endtk.fillJet (jet, len (event.vertices)) self.matchedCleanJetHistos_endtk.fillJet (jet) elif 2.6 < abs (jet.gen.eta ()) < 2.9 : self.matchedCleanJetHistosResolution_endNOtk.fillJet (jet, len (event.vertices)) self.matchedCleanJetHistos_endNOtk.fillJet (jet) elif 3.1 < abs (jet.gen.eta ()) : self.matchedCleanJetHistosResolution_fwd.fillJet (jet, len (event.vertices)) self.matchedCleanJetHistos_fwd.fillJet (jet) ##PG debugging for tails #for jet in event.matchedCleanJets : #deltaRR = deltaR( jet.eta (), jet.phi (), jet.gen.eta (), jet.gen.phi ()) #self.h_matchDR.Fill (deltaRR) #self.h_relPtVSmatchDR.Fill (deltaRR, jet.pt () / jet.gen.pt ()) #if abs (jet.gen.eta ()) > 2.5 and abs (jet.gen.eta ()) < 3 : #self.h_relPtVSchFrac.Fill (jet.chargedHadronEnergyFraction (), jet.pt () / jet.gen.pt ()) #if jet.gen.pt () > 20 and jet.gen.pt () < 40 : #self.h_PTRatioVSgenEta.Fill (jet.gen.eta (), jet.pt () / jet.gen.pt ()) #if abs (jet.gen.eta ()) > 1.6 : #self.h_PTRatioVSgenPt.Fill (jet.gen.pt (), jet.pt () / jet.gen.pt ()) #minDelta = 10 #secondClosest = jet #for recojet in event.cleanJets : #if recojet == jet : continue #dr2 = deltaR2( jet.gen.eta (), jet.gen.phi (), recojet.eta (), recojet.phi ()) #if dr2 < minDelta : #minDelta = dr2 #secondClosest = recojet ##if len(event.vertices) < 10 or abs (jet.gen.eta ()) < 1.6: continue #self.h_secondClosestVsPtratio.Fill (jet.pt () / jet.gen.pt (), math.sqrt (minDelta)) #if jet.pt () / jet.gen.pt () < 0.2 and jet.gen.pt () > 20 and abs (jet.gen.eta ()) < 3 and abs (jet.gen.eta ()) > 2.5 : #print '============',len(event.genLeptons) #print jet.pt (), jet.eta (), jet.phi (), jet.jecFactor (0) #print jet.gen.pt (), jet.gen.eta (), jet.gen.phi () #print '------------ leptons:' #for lept in event.genLeptons : #print lept.pt (), lept.eta (), lept.phi () #print '------------' #for recojet in event.cleanJets : #print "RECO",recojet.pt (), recojet.eta (), recojet.phi (), recojet.jecFactor (0) #for genjet in event.selGenJets : #print "GEN ",genjet.pt (), genjet.eta (), genjet.phi () #aveDeltaR = 0 #num = 0 #for recojet1 in event.cleanJets : #minDelta = 10 #closest = recojet1 #for recojet2 in event.cleanJets : #if recojet1 == recojet2 : continue #dr2 = deltaR2( recojet1.eta (), recojet1.phi (), recojet2.eta (), recojet2.phi ()) #if dr2 < minDelta : #minDelta = dr2 #closest = recojet2 #if minDelta == 10 : continue #aveDeltaR = aveDeltaR + math.sqrt (minDelta) #num = num + 1 #if num > 0 : #aveDeltaR = aveDeltaR / num #self.h_avedistanceVSNvtx.Fill (len(event.vertices), aveDeltaR) if self.doJetIdHisto: self.gluCleanHistosId.fillEvent(event.cleanGluJets,event.vertices) self.quarkCleanHistosId.fillEvent(event.cleanQuarkJets,event.vertices) ### self.matchedCleanHistosId.fillEvent(event.matchedCleanJets,event.vertices) self.reweiMatchedCleanHistosId.fillEvent(event.matchedCleanJets,event.vertices) self.unmatchedCleanHistosId.fillEvent(event.unmatchedCleanJets,event.vertices)
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) : #read all the handles defined beforehand self.readCollections (iEvent) # print '-------' jetEtaCut = 4.5 event.vertices = self.handles['vertices'].product () self.h_NVTXnum.Fill (len (event.vertices)) YeCHSjets = self.handles['YeCHSjets'].product () event.YeCHSjets = [ jet for jet in YeCHSjets if ( abs(jet.eta()) < jetEtaCut and jet.pt()>self.cfg_ana.ptCut and self.isPFLoose(jet) ) ] NoCHSjets = self.handles['NoCHSjets'].product () event.NoCHSjets = [ jet for jet in NoCHSjets if ( abs(jet.eta()) < jetEtaCut and jet.pt()>self.cfg_ana.ptCut and self.isPFLoose(jet) ) ] # get status 2 leptons if 'genParticlesPruned' in self.mchandles: event.genLeptons = [ lep for lep in self.mchandles['genParticlesPruned'].product() if lep.status() == 2 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ] else: event.genLeptons = [ lep for lep in self.mchandles['genParticles'].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs(lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ] event.NoCHSgenJets = map (GenJet, self.mchandles['NoCHSgenJets'].product ()) event.myNoCHSGenJets = [GenJet (jet) for jet in event.NoCHSgenJets if (jet.pt ()>self.cfg_ana.genPtCut)] event.selNoCHSGenJets = cleanObjectCollection (event.myNoCHSGenJets, event.genLeptons, 0.2) event.YeCHSgenJets = map (GenJet, self.mchandles['YeCHSgenJets'].product ()) event.myYeCHSGenJets = [GenJet (jet) for jet in event.YeCHSgenJets if (jet.pt ()>self.cfg_ana.genPtCut)] event.selYeCHSGenJets = cleanObjectCollection (event.myYeCHSGenJets, event.genLeptons, 0.2) self.h_NoCHS_genjetsnum.Fill (len (event.selNoCHSGenJets)) if len (event.genLeptons) > 2 : return for jet in event.selNoCHSGenJets: self.h_NoCHS_genjetspt.Fill (jet.pt ()) ; self.h_NoCHS_genjetseta.Fill (jet.eta ()) ; for jet in event.selYeCHSGenJets: self.h_YeCHS_genjetspt.Fill (jet.pt ()) ; self.h_YeCHS_genjetseta.Fill (jet.eta ()) ; event.cleanYeCHSJets = cleanObjectCollection (event.YeCHSjets, event.genLeptons, 0.2) event.cleanNoCHSJets = cleanObjectCollection (event.NoCHSjets, event.genLeptons, 0.2) for jet in event.cleanYeCHSJets : self.h_YeCHS_recjetspt .Fill (jet.pt ()) ; self.h_YeCHS_recjetseta .Fill (jet.eta ()) ; # if (abs(jet.pt () > 20) and len(event.vertices) > 10): # self.h_YeCHS_correction.Fill (jet.eta (), 1. / jet.jecFactor(0)) ; # print 'Ev', event.iEv, 'YeCHS ', round (jet.eta (), 2), round (jet.phi (), 2), round (jet.pt () * jet.jecFactor(0), 2)#, round (jet.component (1).fraction (), 2) for jet in event.cleanNoCHSJets: self.h_NoCHS_recjetspt .Fill (jet.pt ()) ; self.h_NoCHS_recjetseta .Fill (jet.eta ()) ; # if (abs(jet.pt () > 20) and len(event.vertices) > 10): # self.h_NoCHS_correction.Fill (jet.eta (), 1. / jet.jecFactor(0)) ; # print 'Ev', event.iEv, 'NoCHS ', round (jet.eta (), 2), round (jet.phi (), 2), round (jet.pt () * jet.jecFactor(0), 2)#, round (jet.component (1).fraction (), 2) #PG removing negative correction jets event.noNegCleanYeCHSJets = [ jet for jet in event.cleanYeCHSJets if (jet.jecFactor(0) > 0) ] event.noNegCleanNoCHSJets = [ jet for jet in event.cleanNoCHSJets if (jet.jecFactor(0) > 0) ] #PG matching between CHS and non CHS event.YeNoCHSmatch = matchObjectCollection2 (event.noNegCleanYeCHSJets, event.noNegCleanNoCHSJets, 0.1) for yejet, nojet in event.YeNoCHSmatch.iteritems(): if nojet == None: continue self.YeNoCHSRatio_eta.Fill (yejet.eta (), yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0))) self.h_NoCHS_correction.Fill (nojet.eta (), 1. / nojet.jecFactor(0)) self.h_YeCHS_correction.Fill (yejet.eta (), 1. / yejet.jecFactor(0)) if len (event.vertices) > 8 and len (event.vertices) <= 10: self.YeNoCHSRatio_eta_PUcut.Fill (yejet.eta (), yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0))) self.h_NoCHS_correction_PUcut.Fill (nojet.eta (), 1. / nojet.jecFactor(0)) self.h_YeCHS_correction_PUcut.Fill (yejet.eta (), 1. / yejet.jecFactor(0)) if nojet.pt () < 40 or nojet.pt () > 60: continue self.YeNoCHSRatio_eta_ptcut.Fill (yejet.eta (), yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0))) self.h_NoCHS_correction_ptcut.Fill (nojet.eta (), 1. / nojet.jecFactor(0)) self.h_YeCHS_correction_ptcut.Fill (yejet.eta (), 1. / yejet.jecFactor(0)) if len (event.vertices) < 8 or len (event.vertices) > 10: continue self.YeNoCHSRatio_eta_ptcut_PUcut.Fill (yejet.eta (), yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0))) self.h_NoCHS_correction_ptcut_PUcut.Fill (nojet.eta (), 1. / nojet.jecFactor(0)) self.h_YeCHS_correction_ptcut_PUcut.Fill (yejet.eta (), 1. / yejet.jecFactor(0)) # if yejet.pt () * yejet.jecFactor(0) < 10: # continue ; # if abs (yejet.eta ()) < 3: # continue ; # print round (yejet.eta (), 2), '\t', round (yejet.pt () * yejet.jecFactor(0), 2), '\t',round (nojet.pt () * nojet.jecFactor(0), 2), '\t',round (yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0)), 2) # print round (yejet.eta (), 2), '\t', round (yejet.pt (), 2), '\t',round (nojet.pt (), 2), '\t',round (yejet.pt () * yejet.jecFactor(0) / (nojet.pt () * nojet.jecFactor(0)), 2) event.matchingCleanYeCHSJets = matchObjectCollection2 (event.cleanYeCHSJets, event.selYeCHSGenJets, 0.25) for jet in event.cleanYeCHSJets : jet.gen = event.matchingCleanYeCHSJets[ jet ] event.matchedCleanYeCHSJets = [jet for jet in event.matchingCleanYeCHSJets if jet.gen != None] for jet in event.matchedCleanYeCHSJets: self.h_YeCHS_recjetspt_match .Fill (jet.pt ()) ; self.h_YeCHS_recjetseta_match.Fill (jet.eta ()) ; self.h_YeCHS_genjetspt_match .Fill (jet.gen.pt ()) ; self.h_YeCHS_genjetseta_match.Fill (jet.gen.eta ()) ; event.matchingCleanNoCHSJets = matchObjectCollection2 (event.cleanNoCHSJets, event.selNoCHSGenJets, 0.25) for jet in event.cleanNoCHSJets : jet.gen = event.matchingCleanNoCHSJets[ jet ] event.matchedCleanNoCHSJets = [jet for jet in event.matchingCleanNoCHSJets if jet.gen != None] for jet in event.matchedCleanNoCHSJets: self.h_NoCHS_recjetspt_match .Fill (jet.pt ()) ; self.h_NoCHS_recjetseta_match.Fill (jet.eta ()) ; self.h_NoCHS_genjetspt_match .Fill (jet.gen.pt ()) ; self.h_NoCHS_genjetseta_match.Fill (jet.gen.eta ()) ; if len (event.vertices) != 10 : return ; for jet in event.matchedCleanNoCHSJets: if (jet.gen.pt () < 20 or jet.gen.pt () > 30 or abs (jet.gen.eta ()) > 1.4) : continue ; self.h_NoCHS_response.Fill ((jet.pt () - jet.gen.pt ()) / jet.gen.pt ()) ; for jet in event.matchedCleanYeCHSJets: if (jet.gen.pt () < 20 or jet.gen.pt () > 30 or abs (jet.gen.eta ()) > 1.4) : continue ; self.h_YeCHS_response.Fill ((jet.pt () - jet.gen.pt ()) / jet.gen.pt ()) ;
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): #read all the handles defined beforehand self.readCollections(iEvent) jetEtaCut = 4.5 # get the vertexes event.vertices = self.handles['vertices'].product() # self.h_nvtx.Fill (len (event.vertices)) # get the jets in the jets variable jets = self.handles['jets'].product() # filter jets with some selections event.jets = [ jet for jet in jets if (abs(jet.eta()) < jetEtaCut and jet.pt() > self.cfg_ana.ptCut and self.isPFLoose(jet)) ] # get status 2 leptons if 'genParticlesPruned' in self.mchandles: event.genLeptons = [ lep for lep in self.mchandles['genParticlesPruned'].product() if lep.status() == 2 and (abs(lep.pdgId()) == 11 or abs( lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ] else: event.genLeptons = [ lep for lep in self.mchandles['genParticles'].product() if lep.status() == 3 and (abs(lep.pdgId()) == 11 or abs( lep.pdgId()) == 13 or abs(lep.pdgId()) == 15) ] # @ Pasquale: why level 3 and not level 2? # event.selGenLeptons = [GenParticle (lep) for lep in event.genLeptons if (lep.pt ()>self.cfg_ana.ptCut and abs (lep.eta ()) < jetEtaCut)] # get genJets event.genJets = map(GenJet, self.mchandles['genJets'].product()) # filter genjets as for reco jets event.selGenJets = [ GenJet(jet) for jet in event.genJets if (jet.pt() > self.cfg_ana.genPtCut) ] #FIXME why are there cases in which there's 4 or 6 leptons? if len(event.genLeptons) != 2: return # in case I want to filter out taus # 11, 13, 15 : e, u, T # event.genOneLepton = [GenParticle (part) for part in event.genLeptons if abs (part.pdgId ()) == 15] # remove leptons from jets if closer than 0.2 event.cleanJets = cleanObjectCollection(event.jets, event.genLeptons, 0.2) event.matchingCleanJets = matchObjectCollection2( event.cleanJets, event.selGenJets, 0.25) # assign to each jet its gen match (easy life :)) for jet in event.cleanJets: jet.gen = event.matchingCleanJets[jet] event.matchedCleanJets = [ jet for jet in event.matchingCleanJets if jet.gen != None ] for jet in event.matchedCleanJets: self.myntuple.Fill(jet.gen.pt(), jet.pt(), jet.gen.eta(), jet.eta(), jet.gen.phi(), jet.phi(), len(event.vertices))