1

我有一个 PDB 文件 '1abz' ( https://files.rcsb.org/view/1ABZ.pdb ),其中包含蛋白质结构的坐标。请忽略标题注释的行,有趣的信息从第 276 行开始,它显示“模型 1”。

我想相对于原点的参考系(即 x=0,y=0,z=0)移动坐标并生成一个新的坐标文件。

我通读了 biopython 教程(http://biopython.org/wiki/The_Biopython_Structural_Bioinformatics_FAQ),使用了 Atom 对象的变换方法(http://biopython.org/DIST/docs/api/Bio.PDB.Atom.Atom- class.html#transform),并想出了这个脚本,但没有成功。

我该怎么办?提前谢谢了!

from Bio import PDB
import numpy as np

parser = PDB.PDBParser()
io = PDB.PDBIO()
struct = parser.get_structure('1abz','1abz.pdb')

for model in struct:
    for chain in model:
        for residue in chain:
            for atom in residue:
                def rotmat():
                    rotation = rotmat(np.pi, Vector(0.0, 0.0, 0.0))
                    translation = np.array((0.0, 0.0, 0.0), 'f')
                    atom.transform(rotation, translation)

io.set_structure(struct)
io.save('1abz_coord.pdb')
4

1 回答 1

1
  • 在你的最后一个循环中,每次循环一个原子时for atom in residue你都在定义函数,但你从不调用该函数。rotmat
  • 尝试删除线def rotmat():
  • 目前你rotation和你translation都不会改变原子坐标。

例如,如果您想定义C1为您的参考点,您可以使用以下代码。

rotation_matrix只是一个不会旋转您的蛋白质的矩阵。np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])也会这样做。

from Bio import PDB
import numpy as np

parser = PDB.PDBParser()
io = PDB.PDBIO()
struct = parser.get_structure('1abz','1abz.pdb')

rotation_matrix = PDB.rotmat(PDB.Vector([0, 0, 0]), PDB.Vector([0, 0, 0]))

for atom in struct.get_atoms():
    atom_C1 = atom.coord.copy()
    break

for model in struct:
    for chain in model:
        for residue in chain:
            for atom in residue:
                atom.transform(rotation_matrix, -atom_C1)

io.set_structure(struct)
io.save('1abz_coord.pdb')
于 2017-12-14T19:53:13.230 回答