Esempio n. 1
0
    def process(self, event):
        sqrts = Collider.SQRTS
        mZ = 91.
        pi = TLorentzVector(0, 0, 0, sqrts)
        jets = getattr(event, self.cfg_ana.jets)
        jets_rescaled = []
        setattr(event, self.cfg_ana.output, jets_rescaled)        
        if len(jets) == 0:
            return
        sump4 = TLorentzVector()
        for jet in jets:
            sump4 += jet.p4()
            # print jet
        a = sump4.Mag2()
        b = -pi * sump4 * 2.
        c = pi.Mag2() - mZ ** 2
        sqdelta = math.sqrt(b ** 2 -4*a*c)
        xmin = (-b - sqdelta) / (2 * a)
        xmax = (-b + sqdelta) / (2 * a)
        scaling_factor = xmin
## this solution leads to negative missing energy,
## going for the physical one
##        if abs(xmax-1) < abs(xmin-1):
##            scaling_factor = xmax
        # print xmin, xmax
        # print scaling_factor
        for jet in jets:
            jet_rescaled = copy.deepcopy(jet)
            jet_rescaled._tlv *= scaling_factor
            jets_rescaled.append(jet_rescaled)