Esempio n. 1
0
def makeBoostMatrix(beta_x, beta_y, beta_z):
    """Construct a boost matrix.

    Returns a 4x4 matrix for the boost for a vector beta whose
    components are 'beta_x', 'beta_y', and 'beta_z'."""

    matrix = Matrix(4, 4)

    # Handle the zero-boost case.
    if beta_x == 0 and beta_y == 0 and beta_z == 0:
        matrix[(0, 0)] = 1
        matrix[(1, 1)] = 1
        matrix[(2, 2)] = 1
        matrix[(3, 3)] = 1
        return matrix

    # Compute beta-squared.
    betas = (beta_x, beta_y, beta_z)
    beta2 = hypot(*betas) ** 2
    if beta2 > 1:
        raise ValueError, "beta may not have magnitude greater than one"
    # Compute gamma.
    gamma = 1 / sqrt(1 - beta2)
    # Construct the boost matrix.
    matrix[(0, 0)] = gamma
    for i in (1, 2, 3):
        element = -gamma * betas[i - 1]
        matrix[(i, 0)] = element
        matrix[(0, i)] = element
    for i in (1, 2, 3):
        for j in range(i, 4):
            element = (gamma - 1) * betas[i - 1] * betas[j - 1] / beta2
            if i == j:
                element += 1
            matrix[(i, j)] = element
            matrix[(j, i)] = element
    return matrix
Esempio n. 2
0
#-----------------------------------------------------------------------
# test stuff
#-----------------------------------------------------------------------

if __name__ == "__main__":
    from   random import random

    mass_Ups = 10.575
    mass_B0 = 5.2794

    cm_frame = Frame(lab.Boost(0, 0, 0.56), name="CM")
    p4_Ups = cm_frame.Momentum(mass_Ups, 0, 0, 0)

    decay_angles = random() * 2 * pi, random() * pi, random() * 2 * pi
    decay_rotation = cm_frame.Rotation(*decay_angles)

    momentum_B0 = twoBodyDecayMomentum(mass_Ups, mass_B0, mass_B0)
    energy_B0 = hypot(momentum_B0, mass_B0)
    p4_B0 = decay_rotation \
            ^ cm_frame.Momentum(energy_B0, 0, 0, momentum_B0)
    p4_B0bar = decay_rotation \
               ^ cm_frame.Momentum(energy_B0, 0, 0, -momentum_B0)

    print "B0 and B0bar coordinates in %s:" % lab
    print "(%.4f, %.4f, %.4f, %.4f)" % lab.coordinatesOf(p4_B0)
    print "(%.4f, %.4f, %.4f, %.4f)" % lab.coordinatesOf(p4_B0bar)
    print "B0 and B0bar coordinates in %s:" % cm_frame
    print "(%.4f, %.4f, %.4f, %.4f)" % cm_frame.coordinatesOf(p4_B0)
    print "(%.4f, %.4f, %.4f, %.4f)" % cm_frame.coordinatesOf(p4_B0bar)
    print "Reconstructed Upsilon(4S) mass =", (p4_B0 + p4_B0bar).mass