我想知道pymol中一些原子的位置向量。我可以计算距离,但我需要位置向量。如何获得相对于某些定义坐标系的原子坐标?
假设有两个原子。我怎样才能得到这两个原子的坐标(x,y,z)?必须有一个参考系来计算这些坐标。pymol 中的参考系是什么?
我想知道pymol中一些原子的位置向量。我可以计算距离,但我需要位置向量。如何获得相对于某些定义坐标系的原子坐标?
假设有两个原子。我怎样才能得到这两个原子的坐标(x,y,z)?必须有一个参考系来计算这些坐标。pymol 中的参考系是什么?
这是一个从pdb
文件中提取数据的简单 Python 函数。它返回一个字典的字典。外部字典由模型编号作为键,内部字典由模型中的原子编号作为键,然后,每一行被读入由相应原子记录中感兴趣的字段键控的字典:
def parsePDB(fname):
f = open(fname)
lines = f.read().split('\n')
f.close()
modelNum = 1
multiModel = False
d = {1:{}}
for line in lines:
fields = line.split()
record = fields[0] if len(fields)> 0 else ''
if record == "MODEL":
if multiModel:
modelNum += 1
d[modelNum] = {}
else:
multiModel = True
elif record == "ATOM":
num = int(fields[1])
atomDict = {}
atomDict["atom"] = fields[2]
atomDict["amino"] = fields[3]
atomDict["chain"] = fields[4]
atomDict["residue"] = int(fields[5])
atomDict["xyz"] = (float(fields[6]),float(fields[7]),float(fields[8]))
d[modelNum][num] = atomDict
return d
一些测试代码:
d = parsePDB("2HIU.pdb")
atom = d[3][358]
print("atom",358,"of model",3,"is the",atom["atom"], "atom of a", atom["amino"],"amino acid")
print("It is located on residue", atom["residue"], "of chain",atom["chain"])
print("Its coordinates are", atom["xyz"])
输出:
atom 358 of model 3 is the OD1 atom of a ASN amino acid
It is located on residue 3 of chain B
Its coordinates are (13.093, 5.012, -5.549)
这来自文件2HIU.pdb。测试代码中使用的文件中的行如下所示:
ATOM 358 OD1 ASN B 3 6.882 2.397 -4.401 1.00 0.00 O
这是对应的最里面的字典的样子:
>>> d[3][358]
{'atom': 'OD1', 'chain': 'B', 'amino': 'ASN', 'residue': 3, 'xyz': (13.093, 5.012, -5.549)}
有两个并发症要记住:
1) 并非所有这些文件都有多个模型。事实上,大多数没有并且缺少开头的行MODEL
。如果len(d)
为 1,则文件中只有一个模型。
2)HETATM
记录对应的原子本身不是蛋白质的一部分,但以某种方式与之结合。我完全忽略了这些。您的目的可能要求您使用它们——在这种情况下,您需要调整代码。