RAU_MasterStudy/thesis/old/measure_angle_by_3_points.py
2025-06-04 20:04:29 +03:00

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)
)
)