def __init__(self,xcjets = None, applyResidualCorrectionsToData = None, applyResidualCorrectionBug = False, gamma = None, gammaDR = 0, electron = None, electronDR = 0, muon = None, muonDR = 0, correctForMuons = None, jesAbs = 1, jesRel = 0 ) : self.value = utils.vector() self.jetP4Source = ("%sCorrectedP4%s"%xcjets)[2:] for item in ["xcjets", "applyResidualCorrectionsToData", "applyResidualCorrectionBug", "correctForMuons", "jesAbs", "jesRel"] : setattr(self, item, eval(item)) self.other = dict( [ (i,(eval(i),eval(i+"DR"))) for i in ["gamma","electron","muon"]] ) self.resCorr = ("%sResidualCorrectionsFromFile%s"%self.xcjets) self.moreName = "; ".join(["%s%sDR<%.2f"%(v[0]+(v[1],)) for v in filter(lambda v: v[0], self.other.values())]) if jesAbs!=1.0 or jesRel!=0.0: self.moreName2 += "jes corr: %.2f*(1+%.2f|eta|)"%(jesAbs,jesRel)
def update(self,ignored) : jetP4s = self.source[self.jetP4Source] killed = self.source["%sIndicesKilled%s"%self.xcjets] nMuonsMatched = self.source["%sNMuonsMatched%s"%self.xcjets] matchedMuons = [] self.value = utils.vector() for iJet in range(len(jetP4s)) : self.value.push_back(self.jes(jetP4s[iJet])) if self.matchesIn("gamma",self.value[iJet]) \ or self.matchesIn("electron",self.value[iJet]) : killed.add(iJet) continue for p4 in self.matchesIn("muon",self.value[iJet], exitEarly=False, indicesStr="%sIndicesNonIso%s") : matchedMuons.append(p4) nMuonsMatched[iJet] += 1 if self.correctForMuons: self.value[iJet] += p4 if self.other["muon"][0] : nonisomu = self.source["%sIndicesNonIso%s"%self.other["muon"][0]] self.source["crock"]["%s%sNonIsoMuonsUniquelyMatched"%self.xcjets]= (len(set(matchedMuons)) == len(nonisomu) == len(matchedMuons))