1

我想计算 PDB 文件中原子之间的距离。如何对 PDB 文件进行此计算?

ATOM      1  N   GLY A  23     -10.507   5.621  25.325  1.00 60.45           N  
ATOM      2  CA  GLY A  23      -9.475   4.636  25.745  1.00 56.55           C
ATOM      3  C   GLY A  23      -8.714   4.045  24.571  1.00 58.66           C
ATOM      4  O   GLY A  23      -8.526   2.829  24.498  1.00 60.74           O 
ATOM      5  N   GLN A  24      -8.275   4.899  23.651  1.00 52.00           N 
ATOM      6  CA  GLN A  24      -7.532   4.446  22.482  1.00 45.40           C 
ATOM      7  C   GLN A  24      -6.089   4.139  22.865  1.00 39.62           C  
ATOM      8  O   GLN A  24      -5.617   4.536  23.928  1.00 35.50           O  
ATOM     14  N   ARG A  25      -5.391   3.428  21.991  1.00 37.97           N 
ATOM     15  CA  ARG A  25      -4.003   3.065  22.237  1.00 37.23           C
ATOM     16  C   ARG A  25      -3.133   4.276  22.555  1.00 36.13           C 
ATOM     17  O   ARG A  25      -2.441   4.293  23.571  1.00 31.46           O 
  • column2 - 原子序数
  • column3 - 原子名称
  • column4 - 残基名称
  • column5 - 链 ID
  • column6 - 残基数
  • column7 - X 坐标
  • column8 - Y 坐标
  • column9 - Z 坐标

distance = sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)

4

1 回答 1

3

您应该避免自己解析 PDB 文件。PDB 文件有很多不规则的地方,像这样awk的工具不太适合。相反,您应该使用已经实现的解析器将结构解析为有意义的对象。

我喜欢Biopython。您应该查看本教程以了解有关如何与结构交互的更多信息,但这是获取两个原子之间距离的一种非常基本的方法。请注意,-运算符被覆盖以返回原子距离(无需处理坐标或距离公式!)。

from Bio import PDB

parser = PDB.PDBParser()

# Parse the PDB file into a meaningful structure object
pdb_path = "/path/to/files/1abc.pdb"
pdb_id = "1abc"
struct = parser.get_struct(pdb_id, pdb_path)

# Get two atoms to compare by navigating the SMRCA structure
chain_a = struct[0]["A"]
res1 = chain_a[26]
res2 = chain_a[23]
atom1 = res1["C"] 
atom2 = res2["C"]

print "Distance: %d" % (atom1 - atom2)

我有点不清楚您希望为哪些原子计算距离,但如果您想根据残基名称进行比较,您可以查看对象的resname字段PDB.Residue(例如)。res1

您可能还想Bio.PDB.NeighborSearch寻找附近的原子(它是 kd 树的实现)。

于 2013-05-11T16:12:26.657 回答