我想计算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
distance = sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)
答案 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树的实现)。