def eigvec_to_eigdispl(v, q, frac_coords, mass):
    """
    Converts a single eigenvector to an eigendisplacement in the primitive cell
    according to the formula::
        
        exp(2*pi*i*(frac_coords \\dot q) / sqrt(mass) * v
    
    Compared to the modulation option in phonopy, here all the additional
    multiplicative and phase factors are set to 1.
    
    Args:
        v: the vector that should be converted. A 3D complex numpy array.
        q: the q point in fractional coordinates
        frac_coords: the fractional coordinates of the atom
        mass: the mass of the atom
    """

    c = np.exp(2j * np.pi * np.dot(frac_coords, q)) / np.sqrt(mass)

    return c*v