def getGenTauJets(event): event.genTauJets = [] event.genTauJetConstituents = [] for gentau in event.gentaus: gentau = HTTGenAnalyzer.getFinalTau(gentau) c_genjet = TauGenTreeProducer.finalDaughters(gentau) c_genjet = [d for d in c_genjet if abs(d.pdgId()) not in [12, 14, 16]] p4_genjet = sum((d.p4() for d in c_genjet if abs(d.pdgId()) not in [12, 14, 16]), ROOT.math.XYZTLorentzVectorD()) genjet = GenParticle(gentau) genjet.setP4(p4_genjet) if p4_genjet.pt() > 15.: event.genTauJets.append(genjet) event.genTauJetConstituents.append(c_genjet)
def getGenTauJets(event): event.genTauJets = [] event.genTauJetConstituents = [] for gentau in event.gentaus: gentau = GenAnalyzer.getFinalTau(gentau) c_genjet = TauGenTreeProducer.finalDaughters(gentau) c_genjet = [ d for d in c_genjet if abs(d.pdgId()) not in [12, 14, 16] ] p4_genjet = sum( (d.p4() for d in c_genjet if abs(d.pdgId()) not in [12, 14, 16]), ROOT.math.XYZTLorentzVectorD()) genjet = GenParticle(gentau) genjet.setP4(p4_genjet) genjet.daughters = c_genjet genjet.decayMode = tauDecayModes.genDecayModeInt(c_genjet) if p4_genjet.pt() > 15.: if any( deltaR(p4_genjet, stored_genjet) < 0.002 for stored_genjet in event.genTauJets): continue # Remove duplicates event.genTauJets.append(genjet) event.genTauJetConstituents.append(c_genjet)
def genMatch(event, leg, ptSelGentauleps, ptSelGenleps, ptSelGenSummary, dR=0.2, matchAll=True): dR2 = dR * dR leg.isTauHad = False leg.isTauLep = False leg.isPromptLep = False leg.genp = None best_dr2 = dR2 # if hasattr(leg, 'genJet') and leg.genJet(): # if leg.genJet().pt() > 15.: # dr2 = deltaR2(leg.eta(), leg.phi(), leg.genJet().eta(), leg.genJet().phi()) # if dr2 < best_dr2: # best_dr2 = dr2 # leg.genp = leg.genJet() # leg.genp.setPdgId(-15 * leg.genp.charge()) # leg.isTauHad = True l1match, dR2best = bestMatch(leg, event.genTauJets) if dR2best < best_dr2: best_dr2 = dR2best leg.genp = GenParticle(l1match) leg.genp.setPdgId(-15 * leg.genp.charge()) leg.isTauHad = True # to generated leptons from taus l1match, dR2best = bestMatch(leg, ptSelGentauleps) if dR2best < best_dr2: best_dr2 = dR2best leg.genp = l1match leg.isTauLep = True leg.isTauHad = False # to generated prompt leptons l1match, dR2best = bestMatch(leg, ptSelGenleps) if dR2best < best_dr2: best_dr2 = dR2best leg.genp = l1match leg.isPromptLep = True leg.isTauLep = False leg.isTauHad = False if best_dr2 < dR2: return # match with any other relevant gen particle if matchAll: l1match, dR2best = bestMatch(leg, ptSelGenSummary) if dR2best < best_dr2: leg.genp = l1match return # Ok do one more Pythia 8 trick... # This is to overcome that the GenAnalyzer doesn't like particles # that have daughters with same pdgId and status 71 if not hasattr(event, 'pythiaQuarksGluons'): event.pythiaQuarksGluons = [] for gen in event.genParticles: pdg = abs(gen.pdgId()) status = gen.status() if pdg in [1, 2, 3, 4, 5, 21] and status > 3: if gen.isMostlyLikePythia6Status3(): event.pythiaQuarksGluons.append(gen) l1match, dR2best = bestMatch(leg, event.pythiaQuarksGluons) if dR2best < best_dr2: leg.genp = l1match return # Now this may be a pileup lepton, or one whose ancestor doesn't # appear in the gen summary because it's an unclear case in Pythia 8 # To check the latter, match against jets as well... l1match, dR2best = bestMatch(leg, event.genJets) # Check if there's a gen jet with pT > 10 GeV (otherwise it's PU) if dR2best < dR2 and l1match.pt() > 10.: leg.genp = PhysicsObject(l1match) jet, dR2best = bestMatch(l1match, event.jets) if dR2best < dR2: leg.genp.detFlavour = jet.partonFlavour() else: print 'no match found', leg.pt(), leg.eta()
def __init__(self, boson): super(Boson, self).__init__(boson) self.leg1 = GenParticle(boson.daughter(0)) self.leg2 = GenParticle(boson.daughter(1))