Skip to content

rotate.py🔗

aimsprop.rotate 🔗

Functions🔗

rotate_frames(bundle: Bundle, R: ndarray) -> Bundle 🔗

Rotate xyz coordinates for all frames in bundle by rotation matrix R.

Performs xyz = xyz * R

Parameters:

Name Type Description Default
bundle Bundle

the Bundle object to rotate coordinates in place (modified in place).

required
R ndarray

rotation or transformation matrix, shape (3,3).

required

Returns:

Type Description
Bundle

bundle: reference to the input Bundle object. The xyz coordinates are overwritten with the transformed xyz coordinates.

Source code in aimsprop/rotate.py
def rotate_frames(
    bundle: Bundle,
    R: np.ndarray,
) -> Bundle:
    """Rotate xyz coordinates for all frames in bundle by rotation matrix R.

    Performs xyz = xyz * R

    Params:
        bundle: the Bundle object to rotate coordinates in
            place (modified in place).
        R: rotation or transformation matrix, shape (3,3).
    Return:
        bundle: reference to the input Bundle object. The
            xyz coordinates are overwritten with the transformed xyz
            coordinates.
    """

    for frame in bundle.frames:
        frame.xyz = np.dot(frame.xyz, R)
    return bundle

rotate_frames_to_z(bundle: Bundle, vec: ndarray) -> Bundle 🔗

Rotate xyz coordinates for all frames in bundle so that vec is rotated onto z. Useful to align molecules to z according to transition dipole moment vector.

Parameters:

Name Type Description Default
bundle Bundle

the Bundle object to rotate coordinates in place (modified in place).

required
vec ndarray

vector in current coordinates to rotate onto +z, shape (3,)

required

Returns:

Type Description
Bundle

bundle: reference to the input Bundle object. The xyz coordinates are overwritten with the transformed xyz coordinates.

Source code in aimsprop/rotate.py
def rotate_frames_to_z(
    bundle: Bundle,
    vec: np.ndarray,
) -> Bundle:
    """Rotate xyz coordinates for all frames in bundle so that vec is
        rotated onto z. Useful to align molecules to z according to transition
        dipole moment vector.

    Params:
        bundle: the Bundle object to rotate coordinates in
            place (modified in place).
        vec: vector in current coordinates to rotate
            onto +z, shape (3,)
    Return:
        bundle: reference to the input Bundle object. The
            xyz coordinates are overwritten with the transformed xyz
            coordinates.
    """

    n = np.array(vec)
    n /= np.sqrt(np.sum(n ** 2))
    v = 0.5 * (n + np.array((0.0, 0.0, 1.0)))
    v /= np.sqrt(np.sum(v ** 2))
    R = np.eye(3)
    R -= 2.0 * np.outer(v, v)
    R = np.dot(R, -np.eye(3))  # preserve chirality
    return rotate_frames(bundle, R)