在蛋白质结构中,不同的角度由特定的原子位置决定。常见的原子类型包括氨基酸主链中的 Cα(α 碳)、C(羰基碳)、N(氮原子)和 O(氧原子)。为了更加清晰,下面给出几种常见角度的定义及其对应的原子类型:
使用具体原子的坐标计算键角和二面角
1. 计算 N−Cα−C 的键角
import torch
def compute_bond_angle(N, C_alpha, C):
# 向量N到C_alpha 和 C_alpha到C
N_to_C_alpha = N - C_alpha
C_alpha_to_C = C - C_alpha
# 计算点积和模长
dot_product = torch.sum(N_to_C_alpha * C_alpha_to_C, dim=-1)
norm_N_to_C_alpha = torch.norm(N_to_C_alpha, dim=-1)
norm_C_alpha_to_C = torch.norm(C_alpha_to_C, dim=-1)
# 计算cosθ
cos_theta = dot_product / (norm_N_to_C_alpha * norm_C_alpha_to_C + 1e-8)
# 计算角度
angle = torch.acos(torch.clamp(cos_theta, -1.0, 1.0))