2013-05-11 268 views
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 
  • 列2 - 原子数
  • 栏3 - 原子名称
  • column4 - 残余名称
  • column5 - 链ID
  • column6 - 残基编号
  • column7 - X坐标
  • column8 - Y坐标
  • column9 - Z坐标

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

+2

你可以改变你的问题没有生物信息学背景的人吗?你试图达到什么并不是一目了然(“我需要根据这些列进行这些计算,因此输出应该是X”而不是“我需要计算原子之间的距离,并且在单链的情况下[ ...]“)。我们不会奇迹般地知道如何解释您的输入文件。 – 2013-05-11 10:54:24

+1

在本论坛中搜索“原子间距离”,然后选择您喜欢的答案。 – 2013-05-11 14:41:51

+0

这个线程可能会帮上你:http://stackoverflow.com/questions/13645439/calculating-the-distance-between-atomic-coordinates – 2013-05-11 16:13:24

回答

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) 

这是稍有我不清楚你想对距离其中原子,但你可以看看在PDB.Residue对象的resname领域(如res1)如果您想根据残留比较名称。

你也可能想看看Bio.PDB.NeighborSearch寻找附近的原子(这是一个K-d树的实现)。

+1

我很高兴,这是很容易理解。我不会为你编写代码,但我可以推荐在每个残差为4埃的残留物上执行一个“NeighborSearch”,然后获得距离。它应该相当简单。如果你阅读教程,你应该拥有完成你的任务的所有必要工具。 – 2013-05-12 05:48:46

+0

哇,NeighborSearch已经内置?俏皮。 http://biopython.org/DIST/docs/api/Bio.PDB.NeighborSearch'.NeighborSearch-class.html – flies 2013-05-16 21:21:28