def norm_quat(q, tolerance=0.00001): r""" Return a copy of the normalised quaternion (adjust length to 1 if deviation larger than given tolerance). Args: :tolerance(float): Maximum deviation of length before rescaling (default ``0.00001``) """ # Adjust length l = linalg.length(q) if abs(l - 1.) > tolerance: q_norm = q_norm/linalg.length(q_norm) else: q_norm = q.copy() return q_norm
def norm_quat(q, tolerance=0.00001): r""" Return a copy of the normalised quaternion (adjust length to 1 if deviation larger than given tolerance). Args: :tolerance(float): Maximum deviation of length before rescaling (default ``0.00001``) """ # Adjust length l = linalg.length(q) if abs(l - 1.) > tolerance: q_norm = q_norm / linalg.length(q_norm) else: q_norm = q.copy() return q_norm
def q_from_p(p, wavelength): r""" Return scattering vector from pixel position vector and photon wavelength. Args: :p (array): Pixel position vector :math:`\vec{p}=(p_x,p_y,p_z)` with respect to the interaction point in unit meter :wavelength (float): Photon wavelength in unit meter """ p0 = p / linalg.length(p) R_Ewald = 2*numpy.pi / wavelength k0 = R_Ewald * numpy.array([0.,0.,1.]) k1 = R_Ewald * p0 q = k0 - k1 return q
def q_from_p(p, wavelength): r""" Return scattering vector from pixel position vector and photon wavelength. Args: :p (array): Pixel position vector :math:`\vec{p}=(p_x,p_y,p_z)` with respect to the interaction point in unit meter :wavelength (float): Photon wavelength in unit meter """ p0 = p / linalg.length(p) R_Ewald = 2 * numpy.pi / wavelength k0 = R_Ewald * numpy.array([0., 0., 1.]) k1 = R_Ewald * p0 q = k0 - k1 return q