2021SC@SDUSC
前言:接着上一篇继续阅读
atom37_to_torsion_angles
def atom37_to_torsion_angles(
aatype: jnp.ndarray, # (B, N)
all_atom_pos: jnp.ndarray, # (B, N, 37, 3)
all_atom_mask: jnp.ndarray, # (B, N, 37)
placeholder_for_undefined=False,
) -> Dict[str, jnp.ndarray]:
这个函数是计算每个残基的 7 个扭转角并且以正弦、余弦编码。
7个扭转角的顺序 分别是[pre_omega, phi, psi, chi_1, chi_2, chi_3, chi_4]
这里 pre_omega 表示给定氨基酸之间的欧米茄扭转角和之前的氨基酸。
这个函数的参数解释如下:
参数:
aatype:氨基酸类型,以整数数组形式给出。
all_atom_pos:所有原子坐标的 atom37 表示。
all_atom_mask:所有原子坐标上掩码的 atom37 表示。
placeholder_for_undefined:表示是否设置屏蔽扭转的标志角度为零
aatype = jnp.minimum(aatype, 20)
上述代码段是 将 aatype > 20 映射到 ‘Unknown’ (20)中去
num_batch, num_res = aatype.shape
pad = jnp.zeros([num_batch, 1, 37, 3], jnp.float32)
prev_all_atom_pos = jnp.concatenate([pad, all_atom_pos[:, :-1, :, :]], axis=1)
pad = jnp.zeros([num_batch, 1, 37], jnp.float32)
prev_all_atom_mask = jnp.concatenate([pad, all_atom_mask[:, :-1, :]], axis=1)
上述代码段是计算骨干角度。
pre_omega_atom_pos = jnp.concatenate(
[prev_all_atom_pos[:, :, 1:3, :], # prev CA, C
all_atom_pos[:, :, 0:2, :] # this N, CA
], axis=-2)
phi_atom_pos = jnp.concatenate(
[prev_all_ato