如何使用biopython库在单个pdb文件中编写多个pdb

时间:2015-03-16 07:44:21

标签: biopython

我想知道如何使用biopython库在单个pdb文件中编写多个pdb。对于读取多个pdbs,例如NMR结构,documentation中有内容,但是对于写作,我找不到。有人对此有所了解吗?

3 个答案:

答案 0 :(得分:2)

是的,你可以。它记录在案here。 图像中有结构对象列表,我们将其命名为structures。您可能想尝试:

from bio import PDB

pdb_io = PDB.PDBIO()

target_file = 'all_struc.pdb'
with pdb_file as open_file:
    for struct in structures:
        pdb_io.set_structure(struct[0])
        pdb_io.save(open_file)

这是解决此问题的最简单方法。一些重要的事情:

  • 不同的蛋白质晶体结构具有不同的坐标系,那么您可能需要superimpose它们。或者应用一些转换函数进行比较。
  • 在pdb_io.set_structure中,您可以选择实体或链,甚至是一堆原子。
  • 在pdb_io.save中有一个辅助参数,它是一个Select类实例。它将帮助你去除水,杂原子,不需要的链......

请注意,NMR结构包含多个实体。您可能想要选择一个。希望这可以帮到你。

答案 1 :(得分:2)

Mithrado的解决方案可能无法实现您想要的效果。使用他的代码,您确实会将所有结构写入单个文件中。但是,它会以其他软件无法读取的方式执行此操作。它在每个结构后面添加一个“END”行。许多软件将在此时停止读取文件,因为这是指定PDB文件格式的方式。

更好的解决方案,但仍然不完美,是从一个结构中删除链并将其作为不同的链添加到第二个结构。您可以通过以下方式执行此操作:

# Get a list of the chains in a structure
chains = list(structure2.get_chains())
# Rename the chain (in my case, I rename from 'A' to 'B')
chains[0].id = 'B'
# Detach this chain from structure2
chains[0].detach_parent()
# Add it onto structure1
structure1[0].add(chains[0])

请注意,您必须注意structure1中尚未存在您要添加的链的名称。

在我看来,Biopython库的结构很差或者在很多方面都不直观,这只是一个例子。如果可以,请使用其他东西。

答案 2 :(得分:0)

受 Nate 解决方案的启发,但将多个模型添加到一个结构中,而不是将多个链添加到一个模型中:

ms = PDB.Structure.Structure("master")

i=0
for structure in structures:
    for model in list(structure):
        new_model=model.copy()
        new_model.id=i
        new_model.serial_num=i+1
        i=i+1
        ms.add(new_model)

pdb_io = PDB.PDBIO()
pdb_io.set_structure(ms)
pdb_io.save("all.pdb")