2. Molecule

A molecule is a system consisting of a nucleus and electrons. For quantum chemistry calculation in MoHa, we will always use the Born-Oppenheimer approximation, which assumes that the motion of atomic nuclei and electrons in a molecule can be separated. \begin{equation} \Psi_{molecule} = \psi_{electronic} \otimes \psi_{nuclear} \end{equation}

The class Molecule in MoHa only contains information about the nuclear. In Moha package, it is a constructed as a subclass of python list, anyhow, for moha user, you can just use it as list of Atom instance.

2.1. Build

To build a water molecule with MoHa,

[1]:
from moha.molecule import Molecule

geo = [[8,   0.000000000000,  -0.143225816552,   0.000000000000],
    ['h',   1.638036840407,   1.136548822547,  -0.000000000000],
    ["H",  -1.638036840407,   1.136548822547,  -0.000000000000]]

mol = Molecule.build(geo,pg=False)

We can specify the essential information of a molecule by Python iterator, tuple or list, in matrix format. Each row of the geo obejct represents an atom in molecule, with first element the number or symbol (case insensitive) of the element.

Another way to build the Molecule instance is loading the molecular geometry from .xyz file.

[2]:
from moha.molecule import Molecule

geo = './data/h2o.xyz'

mol = Molecule.build(geo,pg=False)

The XYZ file format is a chemical file format. There is no formal standard and several variations exist, but a typical XYZ format specifies the molecule geometry by giving the number of atoms with Cartesian coordinates that will be read on the first line, a comment on the second, and the lines of atomic coordinates in the following lines.

The typical formatting of xyz is:

<number of atoms>
comment line
<element>   <X>    <Y>    <Z>
...

In quantum chemistry, the atomic unit system is generally used, here Bohr radius (\(a_0\) = 0.0529177nm) is taken as the unit by default.

Only instance of Atom class are allowed to be the element of Molecule instances.

Atom

number

name

symbol

coordinate

mass

mol[0]

8

Oxygen

O

(0.000000,-0.143225,0.000000)

15.9994

mol[1]

1

Hydrogen

H

(1.638036,1.136548,-0.000000)

1.007975

mol[2]

1

Hydrogen

H

(-1.638036,1.136548,-0.000000)

1.007975

2.2. Geometry Methods

  • Bond Lengths

Calculate the atomic distances between atom i and atom j using the expression:

\begin{equation} R_{ij} = \sqrt{(x_i-x_j)^2+(y_i-y_j)^2+(z_i-z_j)^2} \end{equation}

  • Bond Angles

Calculate bond angles between atoms i-j-k, where j is the central atom using the expression:

\begin{equation} \Phi_{ijk} = \sqrt{(x_i-x_j)^2+(y_i-y_j)^2+(z_i-z_j)^2} \end{equation}

where the eij are unit vectors between the atoms, e.g.,

  • Out-of-Plane Angles

Calculate all possible out-of-plane angles. For example, the angle θijkl for atom i out of the plane containing atoms j-k-l (with k as the central atom, connected to i) is given by:

\begin{equation} \Phi_{ijk} = \sqrt{(x_i-x_j)^2+(y_i-y_j)^2+(z_i-z_j)^2} \end{equation}

  • Center of Mass

Find the center of mass of the molecule:

\begin{equation} \begin{aligned} X_{com} = \frac{\sum_i m_i x_i}{\sum_i m_i} &Y_{com} = \frac{\sum_i m_i y_i}{\sum_i m_i} &Z_{com} = \frac{\sum_i m_i z_i}{\sum_i m_i} \end{aligned} \end{equation}

where mi is the mass of atom i and the summation runs over all atoms in the molecule.

Translate the input coordinates of the molecule to the center-of-mass.

  • Rotational Constants

Only instance of Atom class are allowed to be the element of Molecule instances.

Methods

Call

Return

Bond Length

mol.bond_length(i,j)

scalar

Bond angle

mol.bond_angle(i,j,k)

scalar

Center of mass

mol.center_of_mass

(x,y,z)

Moment of inertia

mol.moment_of_inertia

\begin{equation} I = \left[ \begin{matrix} I_{xx}&I_{xy}&I_{xz}\\ I_{yx}&I_{yy}&I_{yz}\\ I_{zx}&I_{zy}&I_{zz}\\ \end{matrix} \right] \end{equation}

[2]:
# Calculate the atomic distances between atom i and atom j
print(mol.bond_length(0,1))

# Calculate bond angles between atoms i-j-k, where j is the central atom

# Find the center of mass of the molecule
print(mol.center_of_mass)
print(mol.moment_of_inertia)
1.008
[ 0.02812358 -0.04871137  0.01988632]
[[ 1.88739293 -0.41753364  0.17045764]
 [-0.41753364  2.36952099 -0.29524068]
 [ 0.17045764 -0.29524068  1.7668645 ]]

2.3. Point Group

Abelian groups are special types of groups in which commutativity holds. In other words, the binary operation on such groups is commutative. Because these abelian groups P all have real-valued character tables, the direct product of any irrep \(I_j\) with itself gives the trivial irrep \(I_0\):

\begin{equation} \forall I_j: I_j\otimes I_j = I_0 \end{equation}

Point Group

0

1

2

3

4

5

6

7

\(C_1\)

A

\(C_i\)

\(A_g\)

\(A_u\)

\(C_2\)

A

B

\(C_s\)

A’

A’’

\(D_2\)

A

\(B_1\)

\(B_2\)

\(B_3\)

\(C_{2v}\)

\(A_1\)

\(A_2\)

\(B_1\)

\(B_2\)

\(C_{2h}\)

\(A_g\)

\(B_g\)

\(A_u\)

\(B_u\)

\(D_{2h}\)

\(A_g\)

\(B_{1g}\)

\(B_{2g}\)

\(B_{3g}\)

\(A_u\)

\(B_{1u}\)

\(B_{2u}\)

\(B_{3u}\)

[ ]: