forte2.symmetry.pg_sym_detect ============================= .. py:module:: forte2.symmetry.pg_sym_detect Module Contents --------------- .. py:class:: PGSymmetryDetector Class to detect Abelian point group symmetry of a molecule. :Parameters: **inertia_tensor** : ndarray of shape (3, 3) Moment of inertia tensor. **com_atomic_positions** : ndarray of shape (natoms, 3) Atomic positions in the center-of-mass frame. **charges** : ndarray of shape (natoms,) Atomic numbers. **tol** : float, optional, default=1e-4 Tolerance for detecting symmetry. .. rubric:: Notes See https://github.com/NASymmetry/MolSym/blob/main/molsym/pgdetect/flowchart.py We first find the principal axes of rotation, and then determine the largest Abelian point group. To find the principal axes, we first compute the principal moments of inertia and their corresponding axes. Depending on the number of degenerate moments of inertia, the molecule is classified as an asymmetric top (non-degenerate), symmetric top (doubly degenerate), or spherical top (triply degenerate). The asymmetric top case is the simplest: these correspond to one of the subgroups of D2h, and the principal axes are the eigenvectors of the inertia tensor. The symmetric top case has a unique axis (e.g. the lone pair axis in NH3), and the other two axes are degenerate in the plane orthogonal to the unique axis. These are the C/D/S cases. D groups have C2 axes orthogonal to the unique axis, so we first check for those. These could be through an atom or through the midpoint between two symmetry equivalent atoms. If we find at least one C2 axis, we use that to define the x-axis in the orthogonal plane, and the y-axis is then determined by the right-hand rule. If not, we are in the C/S case, and we need to look for sigma_v planes. We know that these must be through atoms, so we pick one and use that to define the x-axis. The spherical top case is the most complicated. To distinguish between T/O/I groups, we find all unique C2 axes. T groups have 3 unique C2 axes, O groups have 9, and I groups have 15. For T groups, the principal axes are just the C2 axes. For O groups, there will be 3 unique C4 axes, which will be the principal axes. I groups are currently treated as C1. .. !! processed by numpydoc !! .. py:attribute:: inertia_tensor :type: numpy.ndarray .. py:attribute:: com_atomic_positions :type: numpy.ndarray .. py:attribute:: charges :type: numpy.ndarray .. py:attribute:: tol :type: float :value: 0.0001 .. py:method:: run() .. py:method:: find_c2_axes_through_atom() .. py:method:: find_c2_axes_through_midpoint()