函数 xyz_to_c6d将给定的蛋白质主链坐标 (N,Cα,C)转换为 6D矩阵表示,即用以下几何特征描述两两残基之间的关系:
- 距离
dist:残基间 Cβ 原子的欧几里得距离。 - 二面角
omega:两个残基的 Cα−Cβ 向量之间的二面角。 - 二面角
theta:由 N−Cα−Cβ和 Cβ间向量定义的二面角。 - 平面角
phi:以 Cα 为中心的平面角。
这些特征被广泛用于蛋白质结构预测和分析,因为它们捕捉了全局与局部几何构象之间的关系。

源代码:
PARAMS = {
"DMIN" : 2.0,
"DMAX" : 20.0,
"DBINS" : 36,
"ABINS" : 36,
}
def generate_Cbeta(N, Ca, C):
# recreate Cb given N,Ca,C
b = Ca - N
c = C - Ca
a = torch.cross(b, c, dim=-1)
# These are the values used during training
Cb = -0.58273431*a + 0.56802827*b - 0.54067466*c + Ca
# fd: below matches sidechain generator (=Rosetta params)
# Cb = -0.57910144 * a + 0.5689693 * b - 0.5441217 * c + Ca
return Cb
def get_pair_dist(a, b):
"""calculate pair distances between two sets of points
Parameters
----------
a,b : pytorch tensors of shape [batch,nres,3]
store Cartesian coordinates of two sets of atoms
Returns
-------
dist : pytorch tensor of shape [batch,nres,nres]
stores paitwise distances between atoms in a and b
"""
dist = torch.cdist(a, b, p=2)
return dist
def get_dih(a, b, c, d):
"""calculate dihedral angles for all consecutive quadruples (a[i],b[i],c[i],d[i])
given Cartesian c

最低0.47元/天 解锁文章
2266

被折叠的 条评论
为什么被折叠?



