我想知道如何使用biopython
库在单个pdb文件中编写多个pdb。对于读取多个pdbs,例如NMR结构,documentation中有内容,但是对于写作,我找不到。有人对此有所了解吗?
答案 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)
这是解决此问题的最简单方法。一些重要的事情:
请注意,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")