Source code for cgexplore._internal.molecular.utilities

# Distributed under the terms of the MIT License.

"""Utilities module.

Author: Andrew Tarzia

"""

import logging

import numpy as np
import spindry as spd
import stk

from .beads import string_to_atom_number

logger = logging.getLogger(__name__)


def get_rotation(radians: float) -> np.ndarray:
    """Get rotation of radians."""
    c, s = np.cos(radians), np.sin(radians)
    return np.array(((c, -s), (s, c)))


def vnorm_r(v: np.ndarray, distance: float) -> np.ndarray:
    """Normalise rotation."""
    return v / np.linalg.norm(v) * distance


[docs] def spd_to_stk(supramolecule: spd.SupraMolecule) -> stk.Molecule: """Convert SpinDry molecule to stk molecule.""" atoms = [ stk.Atom( id=i.get_id(), atomic_number=string_to_atom_number(i.get_element_string()), ) for i in supramolecule.get_atoms() ] bonds = [ stk.Bond( atom1=atoms[i.get_atom1_id()], atom2=atoms[i.get_atom2_id()], order=1, ) for i in supramolecule.get_bonds() ] return stk.BuildingBlock.init( atoms=atoms, bonds=bonds, position_matrix=supramolecule.get_position_matrix(), )