Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
 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