def flip_weight(self, electron): f_1 = yahist_2D_lookup(self.ratio, electron.pt[:, 0:1], abs(electron.eta[:, 0:1])) f_2 = yahist_2D_lookup(self.ratio, electron.pt[:, 1:2], abs(electron.eta[:, 1:2])) # I'm using ak.prod and ak.sum to replace empty arrays by 1 and 0, respectively weight = ak.sum(f_1 / (1 - f_1), axis=1) * ak.prod( 1 - f_2 / (1 - f_2), axis=1) + ak.sum( f_2 / (1 - f_2), axis=1) * ak.prod(1 - f_1 / (1 - f_1), axis=1) return weight
def flip_ratio(self, lepton1, lepton2): """takes a dilepton event and weights it based on the odds that one of the leptons has a charge flip""" flip1 = yahist_2D_lookup(self.ratio, lepton1.pt, abs(lepton1.eta)) flip2 = yahist_2D_lookup(self.ratio, lepton2.pt, abs(lepton2.eta)) flip_rate1 = (ak.prod(flip1, axis=1) * ak.prod(1 / (1 - flip1), axis=1) * ak.prod(1 - flip2 / (1 - flip2), axis=1)) + ( ak.prod(flip2, axis=1) * ak.prod(1 / (1 - flip2), axis=1) * ak.prod(1 - flip1 / (1 - flip1), axis=1)) return flip_rate1
def FR_weight(self, lepton): f_1 = yahist_2D_lookup(self.ratio, lepton.conePt[:, 0:1], abs(lepton.eta[:, 0:1])) #breakpoint() # I'm using ak.prod and ak.sum to replace empty arrays by 1 and 0, respectively weight = ak.sum( f_1 / (1 - f_1), axis=1 ) #*ak.prod(1-f_2/(1-f_2), axis=1) + ak.sum(f_2/(1-f_2), axis=1)*ak.prod(1-f_1/(1-f_1), axis=1) return weight
def get(self, ele, mu): if self.year == 2016: muonScaleFactor = yahist_2D_lookup(self.h_muonScaleFactor, mu.pt, np.abs(mu.eta)) trackingSF = yahist_1D_lookup(self.h_trackingSF, mu.eta) electronScaleFactor_legacy = yahist_2D_lookup(self.h_electronScaleFactor_legacy, ele.pt, ele.eta) electronScaleFactorReco_legacy = yahist_2D_lookup(self.h_electronScaleFactorReco_legacy, ele.pt, ele.eta) sf = ak.prod(muonScaleFactor, axis=1)*ak.prod(trackingSF, axis=1)*ak.prod(electronScaleFactor_legacy, axis=1)*ak.prod(electronScaleFactorReco_legacy, axis=1) return sf if self.year == 2017: muonScaleFactor_Medium = yahist_2D_lookup(self.h_muonScaleFactor_Medium, mu.pt, np.abs(mu.eta)) muonScaleFactor_RunBCDEF = yahist_2D_lookup(self.h_muonScaleFactor_RunBCDEF, mu.pt, np.abs(mu.eta)) electronScaleFactor_RunBCDEF = yahist_2D_lookup(self.h_electronScaleFactor_RunBCDEF, ele.pt, ele.eta) electronScaleFactorReco_RunBCDEF = yahist_2D_lookup(self.h_electronScaleFactorReco_RunBCDEF, ele.pt, ele.eta) sf = ak.prod(muonScaleFactor_Medium, axis=1)*ak.prod(muonScaleFactor_RunBCDEF, axis=1)*ak.prod(electronScaleFactor_RunBCDEF, axis=1)*ak.prod(electronScaleFactorReco_RunBCDEF, axis=1) return sf if self.year == 2018: muonScaleFactor_RunABCD = yahist_2D_lookup(self.h_muonScaleFactor_RunABCD, mu.pt, np.abs(mu.eta)) muonScaleFactor_Medium = yahist_2D_lookup(self.h_muonScaleFactor_Medium, mu.pt, np.abs(mu.eta)) electronScaleFactor_RunABCD = yahist_2D_lookup(self.h_electronScaleFactor_RunABCD, ele.pt, ele.eta) electronScaleFactorReco_RunABCD = yahist_2D_lookup(self.h_electronScaleFactorReco_RunABCD, ele.pt, ele.eta) sf = ak.prod(muonScaleFactor_RunABCD, axis=1)*ak.prod(muonScaleFactor_Medium, axis=1)*ak.prod(electronScaleFactor_RunABCD, axis=1)*ak.prod(electronScaleFactorReco_RunABCD, axis=1) return sf