计算坐标之间的距离

时间:2013-05-11 05:42:33

标签: bioinformatics

我想计算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 - atom name
  • column4 - 残留名称
  • column5 - chain id
  • 第6栏 - 残留数
  • column7 - X坐标
  • column8 - Y坐标
  • column9 - Z坐标

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

1 个答案:

答案 0 :(得分:3)

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

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

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字段(例如{{1} })如果你想根据残留名称进行比较。

您可能还希望看res1寻找附近的原子(它是k-d树的实现)。