有没有办法从配体残基获得原子的完整列表?

问题描述

我目前正在分析由蛋白质袋和配体分子组成的PDB文件。 每个配体的残基名称设置为“ UNL”,PDB文件如下所示:

HETATM   82  C   UNL     1      26.597 -14.916  44.878  1.00  0.00           C
HETATM   83  C   UNL     1      26.531 -16.231  44.189  1.00  0.00           C
HETATM   84  C   UNL     1      27.120 -15.808  42.893  1.00  0.00           C
HETATM   85  C   UNL     1      28.329 -15.071  43.387  1.00  0.00           C
HETATM   86  C   UNL     1      28.931 -14.170  42.366  1.00  0.00           C
HETATM   87  O   UNL     1      26.682 -15.216  46.247  1.00  0.00           O
HETATM   88  O   UNL     1      27.464 -17.006  44.905  1.00  0.00           O
HETATM   89  O   UNL     1      27.392 -16.979  42.137  1.00  0.00           O
HETATM   90  O   UNL     1      27.766 -14.291  44.394  1.00  0.00           O
HETATM   91  O   UNL     1      30.134 -13.666  42.869  1.00  0.00           O
HETATM   92  P   UNL     1      30.766 -12.347  42.334  1.00  0.00           P
HETATM   93  O   UNL     1      29.854 -11.258  42.524  1.00  0.00           O
HETATM   94  O   UNL     1      31.832 -12.240  43.274  1.00  0.00           O
HETATM   95  O   UNL     1      31.114 -12.735  40.988  1.00  0.00           O
HETATM   96  P   UNL     1      25.791 -14.349  47.212  1.00  0.00           P
HETATM   97  O   UNL     1      25.136 -13.375  46.321  1.00  0.00           O
HETATM   98  O   UNL     1      24.939 -15.263  47.985  1.00  0.00           O
HETATM   99  O   UNL     1      27.047 -13.730  48.313  1.00  0.00           O
HETATM  100  P   UNL     1      27.751 -12.152  47.857  1.00  0.00           P
HETATM  101  O   UNL     1      26.680 -11.123  47.845  1.00  0.00           O
HETATM  102  O   UNL     1      28.472 -12.318  46.604  1.00  0.00           O
HETATM  103  O   UNL     1      28.661 -12.022  49.014  1.00  0.00           O

我试图简单地通过以下方式获得原子列表

from Bio.PDB.PDBParser import PDBParser
import numpy as np

structure = PDBParser(QUIET=True).get_structure('X','sample.pdb')

lig_res = [r for r in structure.get_residues() if r.get_resname() == 'UNL'][0]
print(lig_res.get_unpacked_list())
ligand_atoms = [a.get_coord() for a in lig_res.get_atoms()]
print(len(ligand_atoms))
print(np.array(ligand_atoms))

但是,我得到的是

[<Atom C>,<Atom O>,<Atom P>]
3
[[ 26.597 -14.916  44.878]
 [ 26.682 -15.216  46.247]
 [ 30.766 -12.347  42.334]]

只有三个原子,看起来像是配体的代表原子。

有没有办法从配体残基获得原子的完整列表?

谢谢。

解决方法

我认为PDB文件无效。根据{{​​3}} “残基中的每个原子必须是唯一可识别的。同一残基中的两个原子只有具有不同的备用位置标识符,才能使用相同的名称。”

您总是得到第一个名为C,O和P的原子。当我将PDB文件的第2行更改为要读取时

HETATM   83  C1  UNL     1      26.531 -16.231  44.189  1.00  0.00           C

您的脚本返回4个原子。 我认为您必须更改原子的名称,以使它们唯一。要么修复创建PDB文件的脚本(如果它在您的控制之下),要么编写一个脚本,通过适当的重命名来修复PDB文件。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...