如何在pymol中定义坐标系?

时间:2015-11-17 22:40:27

标签: pymol

我想知道pymol中一些原子的位置向量。我可以计算距离,但我需要位置向量。如何获得关于某些定义坐标系的原子坐标?

假设有两个原子。如何获得这两个原子的坐标(x,y,z)?必须有一个参考框架来计算这些坐标。 pymol中的参考框架是什么?

1 个答案:

答案 0 :(得分:1)

这是一个简单的Python函数,用于从pdb文件中提取数据。它返回字典词典的字典。外部字典由模型编号键入,内部字典由模型中的原子编号键入,然后,每行读入由相应原子记录中感兴趣的字段键入的字典:

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记录对应的原子不是蛋白质本身的一部分,但与它有某种联系。我完全忽略了这些。您的目的可能要求您使用它们 - 在这种情况下,您需要调整代码。