我正在尝试浏览一个 .pdb 文件,计算蛋白质复合物链 A 和 B 上不同残基的 α 碳原子之间的距离,然后将距离连同链标识符和残基编号一起存储在字典中。
例如,如果在链 A 上的残基 100 上发现第一个 α 碳(“CA”),并且它所结合的在链 BI 上的残基 123 上,我希望我的字典看起来像 d={(A, 100) :[B, 123, distance_between_atoms]}
from Bio.PDB.PDBParser import PDBParser
parser=PDBParser()
struct = parser.get_structure("1trk", "1trk.pdb")
def getAlphaCarbons(chain):
vec = []
for residue in chain:
for atom in residue:
if atom.get_name() == "CA":
vec = vec + [atom.get_vector()]
return vec
def dist(a,b):
return (a-b).norm()
chainA = struct[0]['A']
chainB = struct[0]['B']
vecA = getAlphaCarbons(chainA)
vecB = getAlphaCarbons(chainB)
t={}
model=struct[0]
for model in struct:
for chain in model:
for residue in chain:
for a in vecA:
for b in vecB:
if dist(a,b)<=8:
t={(chain,residue):[(a, b, dist(a, b))]}
break
print t
它已经运行程序很长时间了,我不得不中止运行(我在某处做了一个无限循环吗??)
我也试图这样做:
t = {i:[((a, b, dist(a,b)) for a in vecA) for b in vecB if dist(a, b) <= 8] for i in chainA}
print t
但它以以下格式打印有关残留物的信息:
<Residue PHE het= resseq=591 icode= >: []
它没有打印与距离相关的任何内容。
非常感谢,我希望一切都清楚。