def boost(df, args): #args must have 4 elements xyzt or pxpypzE px, py, pz = getXYZ(df, args) E = DfToNp(df[[args[3]]].dropna(axis=0)) l = TLorentzVector() with np.nditer([px, py, pz, E, None, None, None, None]) as it: for pi, pj, pk, el, pm, en, phi, cost in it: l.SetPxPyPzE(pi, pj, pk, el) bi = pi / el bj = pj / el bk = pk / el l.Boost(-bi, -bj, -bk) pm[...] = l.Px() en[...] = l.E() phi[...] = l.Phi() cost[...] = l.CosTheta() return (it.operands[4], it.operands[5], it.operands[6], it.operands[7])
jpsi = mu_m + mu_p x = mu_m + mu_p + g mu_m.Boost(-x.BoostVector()); mu_p.Boost(-x.BoostVector()); g.Boost (-x.BoostVector()); jpsi.Boost(-x.BoostVector()); x.Boost (-x.BoostVector()); mu_m.Boost(-jpsi.BoostVector()); mu_p.Boost(-jpsi.BoostVector()); g.Boost (-jpsi.BoostVector()); # if ((jpsi.Vect().Mag()>tol) and (mu_p.Vect().Mag()>tol) and (mu_m.Vect().Mag()>tol) and (g.Vect().Mag()>tol) and (x.Vect().Mag()>0)): l_cosThetaStar.append(jpsi.CosTheta()) cosTheta1 = jpsi.Vect().Dot(mu_p.Vect()) / ((jpsi.Vect().Mag())*(mu_p.Vect().Mag())); l_cosTheta1mu_p.append(cosTheta1) cosTheta1 = jpsi.Vect().Dot(mu_m.Vect()) / ((jpsi.Vect().Mag())*(mu_m.Vect().Mag())); l_cosTheta1mu_m.append(cosTheta1) M_mumu = (mu_m+mu_p).M() l_M_mumu.append(M_mumu) M_mumugamma = (mu_m+mu_p+g).M() l_M_mumugamma.append(M_mumugamma) tot_ev += 1
def CosTheta(parts): p=TLorentzVector(0,0,0,0) for part in parts: p=p+part.P4() return p.CosTheta()