计算每个原子与原子的距离

时间:2018-04-05 17:35:58

标签: python-3.x

我在文本文件中有如下数据

ATOM      2  CA  ALA A   2      25.587 -25.158  -9.461  1.00 59.65           C
ATOM      7  CA  LYS A   3      23.789 -25.564 -12.791  1.00 56.33           C
ATOM     16  CA  ILE A   4      23.990 -21.786 -13.168  1.00 47.06           C
ATOM     24  CA  ASP A   5      27.381 -20.176 -12.568  1.00 45.48           C
ATOM     32  CA  ASN A   6      27.343 -16.666 -11.069  1.00 38.90           C
ATOM     40  CA  ALA A   7      23.585 -16.811 -10.459  1.00 31.65           C
ATOM     45  CA  VAL A   8      22.594 -13.568  -8.716  1.00 27.49           C
ATOM     52  CA  LEU A   9      20.243 -15.584  -6.497  1.00 25.94           C
ATOM     60  CA  PRO A  10      21.933 -18.297  -4.388  1.00 26.36           C

我想计算每个CA原子与彼此原子的距离。第7,8和9列分别是X,Y,Z的坐标。要找到距离(即)距离= sqrt((x2-x1)** 2+(y2-y1)** 2+(z2-z1)** 2),最后打印数值及其相应的残差对。< / p>

我怎么能用python

做到这一点

输出如下:

ALA-LYS:3.66
ALA-ILE:3.33
ALA-ASP:3.42
ALA-ASN:3.54
ALA-ALA:3.32
ALA-VAL:4.32
ALA-LEU:2.65
ALA-PRO:3.22
LYS-ALA:4.35
LYS-ILE:3.33
LYS-ASP:3.67

依此类推(输出中的值不正确)

1 个答案:

答案 0 :(得分:0)

假设您将数据作为嵌套的numpy数组加载(您也可以使用Pandas数据框),您可以组成distance函数来计算欧氏距离。其余的东西应该可以通过嵌套的for循环实现。

import numpy
def distance(x1,x2,y1,y2,z1,z2):
    return round(numpy.sqrt((x1-x2)**2+(y1-y2)**2+(z1-z2)**2),3)
#data is the data loaded as a nested numpy array
out = []
for i in data:
    for j in data:
        if i==j:
            continue
        d = distance(i[6],j[6],i[7],j[7],i[8],j[8])
        out.append(i[3]+'-'+j[3]+': '+str(d)+'\n')
print(out)