43 lines
1.0 KiB
Python
43 lines
1.0 KiB
Python
# REMARK 1 CREATED WITH OPENMM 8.2, 2025-04-07
|
|
# HETATM 1 O A 1 0.428 0.562 -0.006 1.00 0.00 O
|
|
# HETATM 2 H1 A 1 1.257 1.041 -0.006 1.00 0.00 H
|
|
# HETATM 3 H2 A 1 -0.243 1.245 -0.006 1.00 0.00 H
|
|
# TER 4 A 1
|
|
# CONECT 1 2 3
|
|
# CONECT 2 1
|
|
# CONECT 3 1
|
|
# END
|
|
|
|
from math import acos, sqrt, pi
|
|
|
|
|
|
def calc_hoh_angle(h1: tuple[float], h2: tuple[float], o: tuple[float]) -> float:
|
|
x1 = h1[0] - o[0]
|
|
y1 = h1[1] - o[1]
|
|
z1 = h1[2] - o[2]
|
|
|
|
x2 = h2[0] - o[0]
|
|
y2 = h2[1] - o[1]
|
|
z2 = h2[2] - o[2]
|
|
|
|
xyz12 = (x1 * x2) + (y1 * y2) + (z1 * z2)
|
|
|
|
angle = acos(xyz12 / (sqrt(x1**2 + y1**2 + z1**2) * sqrt(x2**2 + y2**2 + z2**2)))
|
|
|
|
return angle * 180 / pi
|
|
|
|
|
|
# OpenMM
|
|
|
|
# Gaussian
|
|
print(
|
|
calc_hoh_angle(
|
|
h1=(0.694, 0.998, 0.000), h2=(-0.859, 1.209, 0.000), o=(-0.157, 0.554, 0.000)
|
|
)
|
|
)
|
|
print(
|
|
calc_hoh_angle(
|
|
h1=(0.000, 0.781, -0.456), h2=(0.000, -0.781, -0.456), o=(0.000, 0.000, 0.114)
|
|
)
|
|
)
|