如何相对于参考系移动蛋白质坐标
How to move protein coordinates with respect to a reference frame
我有一个 PDB 文件“1abz”(https://files.rcsb.org/view/1ABZ.pdb),其中包含蛋白质结构的坐标。请忽略 header 注释行,有趣的信息从第 276 行开始 'MODEL 1'。
我想在原点(即 x=0、y=0、z=0)相对于参考坐标系移动坐标并生成一个新的坐标文件。
我通读了 biopython 教程 (http://biopython.org/wiki/The_Biopython_Structural_Bioinformatics_FAQ), used the transform method of the Atom object (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')
- 在你的最后一个循环中
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')
我有一个 PDB 文件“1abz”(https://files.rcsb.org/view/1ABZ.pdb),其中包含蛋白质结构的坐标。请忽略 header 注释行,有趣的信息从第 276 行开始 'MODEL 1'。
我想在原点(即 x=0、y=0、z=0)相对于参考坐标系移动坐标并生成一个新的坐标文件。
我通读了 biopython 教程 (http://biopython.org/wiki/The_Biopython_Structural_Bioinformatics_FAQ), used the transform method of the Atom object (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')
- 在你的最后一个循环中
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')