def getStatusPhotons(event, sample): GenMGPhotons = getCollection(event, 'GenMGPhoton', ["pt", "eta", "phi", "status"], 'nGenMGPhoton') GenMGAllPhotons = getCollection(event, 'GenMGAllPhoton', ["pt", "eta", "phi", "status"], 'nGenMGAllPhoton') GenAllJet = getCollection(event, 'GenAllJet', ["pt", "eta", "phi"], 'nGenAllJet') GenLepton = getCollection(event, 'GenLepton', ["pt", "eta", "phi"], 'nGenLepton') GenAllLepton = getCollection(event, 'GenLepton', ["pt", "eta", "phi"], 'nGenAllLepton') GenMGAllPhotons = list( filter( lambda j: min([999] + [deltaR2(j, p) for p in GenAllJet]) > 0.04, GenMGAllPhotons)) # GenMGAllPhotons = list( filter( lambda j: min( [999] + [ deltaR2( j, p ) for p in GenLepton ] ) > 0.04, GenMGAllPhotons ) ) GenLepton = list( filter( lambda j: min([999] + [ deltaR2(j, p) for p in GenMGAllPhotons if p["status"] > 1 ]) > 0.04, GenLepton)) # GenMGPhotons = filter( lambda x: x["status"]>1, GenMGPhotons ) event.nGenMGPhoton = len(GenMGPhotons) if event.nGenLepton == len( GenLepton) and len(GenAllLepton) == 1 else 0
def calcdR(event, sample): # if sample.name != "cut": event.genJetDR = 1. GenJets = getCollection(event, 'GenJet', ["pt", "eta", "phi"], 'nGenJet') GenJets = filter(lambda p: p["pt"] > 5, GenJets) GenParts = getCollection(event, 'GenPart', ["status", "pt", "eta", "phi", "pdgId"], 'nGenPart') GenLeptons = filter( lambda p: (abs(p["pdgId"]) == 11 or abs(p["pdgId"] == 13)) and p["pt"] > 5 and p["status"] == 1, GenParts) # print GenLeptons GenJets = deltaRCleaning(GenJets, GenLeptons, dRCut=0.4) GenPhotons = filter( lambda p: p["pdgId"] == 22 and p["pt"] > 10 and p["status"] == 1, GenParts) GenPhotons.sort(key=lambda p: -p['pt']) GenPhotons = deltaRCleaning(GenPhotons, GenLeptons, dRCut=0.4) GenJets = deltaRCleaning(GenJets, GenPhotons, dRCut=0.05) # print GenPhotons, GenJets if GenPhotons and GenJets: event.genJetDR = min(deltaR(GenPhotons[0], j) for j in GenJets) else: event.genJetDR = -1
def getMinDR(event, sample): GenJets = getCollection(event, 'GenJet', ["pt", "eta", "phi", "pdgId", "matchBParton"], 'nGenJet') trueBjets = list(filter(lambda j: j['matchBParton'], GenJets)) trueNonBjets = list(filter(lambda j: not j['matchBParton'], GenJets)) GenPromptLeptons = getCollection(event, 'GenLepton', ["pt", "eta", "phi"], 'nGenLepton') GenMGPhotonsAll = getCollection( event, 'GenMGPhoton', ["pt", "eta", "phi", "status", "motherPdgId"], 'nGenMGPhoton') if "nPhoton" in args.selection: GenMGPhotonsAll = list( filter(lambda g: g["status"] > 1, GenMGPhotonsAll)) event.minDRaa = min([ deltaR(g1, g2) for i, g1 in enumerate(GenMGPhotonsAll[:-1]) for g2 in GenMGPhotonsAll[i + 1:] ] + [999]) event.minDRaj = min( [deltaR(a, j) for a in GenMGPhotonsAll for j in trueNonBjets] + [999]) event.minDRab = min( [deltaR(a, b) for a in GenMGPhotonsAll for b in trueBjets] + [999]) event.minDRal = min( [deltaR(l, a) for l in GenPromptLeptons for a in GenMGPhotonsAll] + [999])
def sequenceExample(event, sample): global taus, notaus, total, wtaus, wnotaus, wtotal, mcWeight # get all photons gPart = getCollection(event, 'GenPart', ["pt", "eta", "phi", "pdgId", "genPartIdxMother"], 'nGenPart') genLep = filter(lambda g: g["pt"] >= 15 and abs(g["eta"]) <= 2.4, gPart) genE = filter(lambda g: abs(g["pdgId"]) == 11, genLep) genMu = filter(lambda g: abs(g["pdgId"]) == 13, genLep) recoLep = getCollection( event, 'Lepton', ["pt", "eta", "phi", "pdgId", "isTracker", "isGlobal", "isPFcand", ""], 'nLepton') selection = "overlapRemoval==1&&pTStitching==1&&Sum$(%s&&GenPart_pt>=15&&abs(GenPart_eta)<=2.4)==1" % lep lep = { "pt": event.GenLeptonCMSUnfold0_pt, "eta": event.GenLeptonCMSUnfold0_eta, "phi": event.GenLeptonCMSUnfold0_phi, "pdgId": event.GenLeptonCMSUnfold0_pdgId, "genPartIdxMother": event.GenLeptonCMSUnfold0_genPartIdxMother } ids = map(abs, getParentIds(lep, gPart)) if 15 in ids: taus += 1 wtaus += mcWeight(event, sample) else: notaus += 1 wnotaus += mcWeight(event, sample) total += 1 wtotal += mcWeight(event, sample)
def sequenceExample( event, sample ): # get all photons allPhotons = getCollection( event, 'Photon', ["pt/F","eta/F","phi/F"], 'nPhoton' ) # additional filters according to your needs highPTPhotons = filter( lambda p: p['pt'] > 100, allPhotons ) # this variable will be added for each event and can be plotted afterwards (event.yourVariable =) event.nHighPTPhotons = len(highPTPhotons)
def mvaPhotons(event, sample): allPhotons = getCollection(event, 'Photon', photonVarList, 'nPhoton') allPhotons.sort(key=lambda j: -j['pt']) mvaPhotons = list( filter(lambda g: recoPhotonSel_mva(g) and g["mvaID_WP90"], allPhotons) + [None])[0] if mvaPhotons: for var in photonVarList: setattr(event, "PhotonMVA0_" + var, mvaPhotons[var])
def calcISRPhotons(event, sample): if sample.name == "data": return gPart = getCollection(event, 'GenPart', genVarList, 'nGenPart') # get Ws from top or MG matrix element (from gluon) GenW = filter( lambda l: abs(l['pdgId']) == 24 and l["genPartIdxMother"] >= 0 and l[ "genPartIdxMother"] < len(gPart), gPart) GenW = filter( lambda l: abs(gPart[l["genPartIdxMother"]]["pdgId"]) in [6, 21], GenW) # e/mu/tau with W mother GenLepWMother = filter( lambda l: abs(l['pdgId']) in [11, 13, 15] and l["genPartIdxMother"] >= 0 and l["genPartIdxMother"] < len(gPart), gPart) GenLepWMother = filter( lambda l: abs(gPart[l["genPartIdxMother"]]["pdgId"]) == 24, GenLepWMother) # e/mu with tau mother and tau has a W in parentsList GenLepTauMother = filter( lambda l: abs(l['pdgId']) in [11, 13] and l["genPartIdxMother"] >= 0 and l["genPartIdxMother"] < len(gPart), gPart) GenLepTauMother = filter( lambda l: abs(gPart[l["genPartIdxMother"]]["pdgId"]) == 15 and 24 in map(abs, getParentIds(gPart[l["genPartIdxMother"]], gPart)), GenLepTauMother) GenElectron = filter(lambda l: abs(l['pdgId']) == 11, GenLepWMother) GenMuon = filter(lambda l: abs(l['pdgId']) == 13, GenLepWMother) GenTau = filter(lambda l: abs(l['pdgId']) == 15, GenLepWMother) GenTauElectron = filter(lambda l: abs(l['pdgId']) == 11, GenLepTauMother) GenTauMuon = filter(lambda l: abs(l['pdgId']) == 13, GenLepTauMother) # can't find jets from W in gParts, so assume non-Leptonic W decays are hadronic W decays event.nGenWElectron = len(GenElectron) # W -> e nu event.nGenWMuon = len(GenMuon) # W -> mu nu event.nGenWTau = len(GenTau) # W -> tau nu event.nGenW = len(GenW) # all W from tops event.nGenWJets = len(GenW) - len(GenLepWMother) # W -> q q event.nGenWTauElectron = len(GenTauElectron) # W -> tau nu, tau -> e nu nu event.nGenWTauMuon = len(GenTauMuon) # W -> tau nu, tau -> mu nu nu event.nGenWTauJets = len(GenTau) - len( GenLepTauMother) # W -> tau nu, tau -> q q nu event.cat_gen2L = int((event.nGenWElectron + event.nGenWMuon + event.nGenWTau) == 2) event.cat_genHad = int((event.nGenWElectron + event.nGenWMuon + event.nGenWTau) == 0) event.cat_genL = int((event.nGenWElectron + event.nGenWMuon) == 1 and not event.cat_gen2L) event.cat_genTau_l = int(event.nGenWTau == 1 and event.nGenWTauJets == 0 and not event.cat_gen2L) event.cat_genTau_q = int(event.nGenWTau == 1 and event.nGenWTauJets == 1 and not event.cat_gen2L)
def clean_Jets(event, sample): allJets = getCollection(event, 'Jet', jetVariableNames, 'nJet') allJets.sort(key=lambda j: -j['pt']) allJets = list(filter(lambda j: j['cleanmask'] and j['pt'] > 30, allJets)) looseJets = getCollection(event, 'JetGood', jetVariableNames, 'nJetGood') looseJets.sort(key=lambda j: -j['pt']) looseJets = list(filter(lambda j: j['cleanmask'], looseJets)) event.nJet = len(allJets) event.nJetGood = len(looseJets) event.nBTag = len( filter(lambda j: isBJet(j, tagger='DeepCSV', year=2017), allJets)) event.nBTagGood = len( filter(lambda j: isBJet(j, tagger='DeepCSV', year=2017), looseJets)) for var in jetVariableNames: for i, jet in enumerate(allJets[:2]): getattr(event, "Jet_" + var)[i] = jet[var] for i, jet in enumerate(looseJets[:2]): getattr(event, "JetGood_" + var)[i] = jet[var]
def sequenceExample( event, sample ): global taus, notaus, total, wtaus, wnotaus, wtotal, mcWeight # get all photons gPart = getCollection( event, 'GenPart', ["pt","eta","phi","pdgId","genPartIdxMother"], 'nGenPart' ) lep = {"pt":event.GenLeptonCMSUnfold0_pt,"eta":event.GenLeptonCMSUnfold0_eta,"phi":event.GenLeptonCMSUnfold0_phi,"pdgId":event.GenLeptonCMSUnfold0_pdgId, "genPartIdxMother":event.GenLeptonCMSUnfold0_genPartIdxMother} ids = map( abs, getParentIds( lep, gPart ) ) if 15 in ids: taus += 1 wtaus += mcWeight( event, sample ) else: notaus += 1 wnotaus += mcWeight( event, sample ) total +=1 wtotal += mcWeight( event, sample )
def checkParentList(event, sample): if sample.name == "data": return reco = { var: getattr(event, photonVariable + "_" + var) for var in photonVarList } gPart = getCollection(event, 'GenPart', genVarList, 'nGenPart') cat = getAdvancedPhotonCategory(reco, gPart, coneSize=0.2, ptCut=5., excludedPdgIds=[12, -12, 14, -14, 16, -16]) setattr(event, photonVariable + "_photonCat", cat)
def getjetswoetacut(event, sample): #jets einlesen alljets = getCollection(event, 'Jet_*', jetVarNames, 'nJet') electrons = getCollection(event, 'Electron_*', jetVarNames, 'nElectron') muons = getCollection(event, 'Muon_*', jetVarNames, 'nMuon') leptons = electrons + muons #clean against good leptons clean_jets, _ = cleanJetsAndLeptons(alljets, leptons) jets = filter(lambda j: j['pt'] > 30, clean_jets) # Filling jets maxNJet = 100 store_jets = jets #if not options.keepAllJets else soft_jets + jets store_jets = store_jets[:maxNJet] store_jets.sort(key=lambda j: -j['pt']) event.nJetGood = len(store_jets) for iJet, jet in enumerate(store_jets): event.JetGoodwoetacut_index[iJet] = jet['index'] for b in jetVarNames: getattr(event, "JetGoodwoetacut_" + b)[iJet] = jet[b] event.abseta[iJet] = abs(jet['eta']) getattr(event, "abseta")[iJet]
def makePhotons(event, sample): allPhotons = getCollection(event, 'Photon', photonVarList, 'nPhoton') allPhotons.sort(key=lambda j: -j['pt']) mediumPhotonsNoSieie = list( filter(lambda g: recoPhotonSel_medium_noSieie(g), allPhotons) + [None])[0] for var in photonVarList: if mediumPhotonsNoSieie: setattr(event, "PhotonNoSieie0_" + var, mediumPhotonsNoSieie[var]) else: try: setattr(event, "PhotonNoSieie0_" + var, float("nan")) except: setattr(event, "PhotonNoSieie0_" + var, 0)
def getGenJets(event, sample): GenJet = getCollection(event, 'GenJet', ["pt"], 'nGenJet') GenJet.sort(key=lambda l: -l["pt"]) GenJet_ptgt30 = filter(lambda j: j["pt"] >= 30, GenJet) GenJet_ptlt30 = filter(lambda j: j["pt"] < 30, GenJet) event.nGenJet_ptgt30 = len(GenJet_ptgt30) event.nGenJet_ptlt30 = len(GenJet_ptlt30) event.nGenJet = len(GenJet) event.GenJet0_pt = GenJet_ptgt30[0]["pt"] if len( GenJet_ptgt30) > 0 else -999 event.GenJet1_pt = GenJet_ptgt30[1]["pt"] if len( GenJet_ptgt30) > 1 else -999 event.ht_ptgt30 = sum([j["pt"] for j in GenJet_ptgt30]) event.ht_ptlt30 = sum([j["pt"] for j in GenJet_ptlt30]) event.ht = sum([j["pt"] for j in GenJet]) del GenJet
def getGenLeps(event, sample): gPart = getCollection(event, 'GenPart', ["pt", "pdgId", "genPartIdxMother"], 'nGenPart') GenPhoton = filter( lambda l: abs(l['pdgId']) == 22 and l["genPartIdxMother"] >= 0 and l[ "genPartIdxMother"] < len(gPart), gPart) GenPhoton = filter( lambda l: not 11 in map( abs, getParentIds(gPart[l["genPartIdxMother"]], gPart)) and not 13 in map(abs, getParentIds(gPart[l["genPartIdxMother"]], gPart)), GenPhoton) GenLep = filter( lambda l: abs(l['pdgId']) in [11, 13] and l["genPartIdxMother"] >= 0 and l["genPartIdxMother"] < len(gPart), gPart) GenLep = filter( lambda l: not 15 in map( abs, getParentIds(gPart[l["genPartIdxMother"]], gPart)), GenLep) GenLep = filter(lambda l: l["pt"] > 2, GenLep) GenLep.sort(key=lambda l: -l["pt"]) event.weight = len(GenLep) > 1 # and len(GenPhoton) > 1 event.genL0_pt = GenLep[0]["pt"] if len(GenLep) > 0 else -999 event.genL1_pt = GenLep[1]["pt"] if len(GenLep) > 1 else -999