For a list of points given in standard coordinates (in terms of e1, e2 and e3), returns the same list
    expressed in the basis (uu, vv, nn), which is supposed to be orthonormal.
    :param uu: First vector of the basis
    :param vv: Second vector of the basis
    :param nn: Third vector of the bais
    :param pps: List of points in basis (e1, e2, e3)
    :return: List of points in basis (uu, vv, nn)

def changebasis(uu, vv, nn, pps):
    """
    For a list of points given in standard coordinates (in terms of e1, e2 and e3), returns the same list
    expressed in the basis (uu, vv, nn), which is supposed to be orthonormal.
    :param uu: First vector of the basis
    :param vv: Second vector of the basis
    :param nn: Third vector of the bais
    :param pps: List of points in basis (e1, e2, e3)
    :return: List of points in basis (uu, vv, nn)
    """
    MM = np.zeros([3, 3], np.float)
    for ii in range(3):
        MM[ii, 0] = uu[ii]
        MM[ii, 1] = vv[ii]
        MM[ii, 2] = nn[ii]
    PP = np.linalg.inv(MM)
    newpps = list()
    for pp in pps:
        newpps.append(matrixTimesVector(PP, pp))
    return newpps