%load_ext autoreload
%autoreload 2
import molsysmt as msm
import numpy as np
import matplotlib.pyplot as plt
Getting principal axes#
get_principal_axes() returns (axes, moments). Each row of axes[frame] is one principal axis, ordered by ascending moment. The basis is orthonormal and right-handed, although individual axis signs are arbitrary. weights=None uses unit weights; use weights='masses' for physical inertia axes. Equal moments define a subspace, not unique individual axes.
import molsysmt as msm
import numpy as np
coordinates = np.zeros([1,8,3]) * msm.pyunitwizard.unit('nm')
coordinates[0,0,:] = msm.pyunitwizard.quantity('[0,0,0] nm')
coordinates[0,1,:] = msm.pyunitwizard.quantity('[0,1,0] nm')
coordinates[0,2,:] = msm.pyunitwizard.quantity('[2,1,0] nm')
coordinates[0,3,:] = msm.pyunitwizard.quantity('[2,0,0] nm')
coordinates[0,4,:] = msm.pyunitwizard.quantity('[0,0,5] nm')
coordinates[0,5,:] = msm.pyunitwizard.quantity('[0,1,5] nm')
coordinates[0,6,:] = msm.pyunitwizard.quantity('[2,1,5] nm')
coordinates[0,7,:] = msm.pyunitwizard.quantity('[2,0,5] nm')
axes, moments = msm.structure.get_principal_axes(coordinates)
for ii in range(3):
print(axes[0,ii,:], moments[0,ii])
[0. 0. 1.] 10.0
[1. 0. 0.] 52.0
[0. 1. 0.] 58.0