以下是使用PyRosetta
对 PDB 结构进行平移和旋转操作并保存为新 PDB 文件的示例代码:
直接操作原子坐标
import pyrosetta
from pyrosetta.rosetta.numeric import xyzVector_double_t
pyrosetta.init()
# 从 PDB 文件加载 pose
pose = pyrosetta.pose_from_pdb('input.pdb')
# 平移操作
translation_vector = xyzVector_double_t(1.0, 2.0, 3.0)
for i in range(1, pose.total_residue() + 1):
for atom_index in range(1, pose.residue(i).natoms() + 1):
pose.residue(i).atom(atom_index).xyz(pose.residue(i).atom(atom_index).xyz() + translation_vector)
# 旋转操作(绕 Z 轴旋转 45 度)
import math
rotation_angle = math.radians(45)
rotation_axis = xyzVector_double_t(0.0, 0.0, 1.0)
for i in range(1, pose.total_residue() + 1):
for atom_index in range(1, pose.residue(i).natoms() + 1):
xyz = pose.residue(i).atom(atom_index).xyz()
x = xyz.x
y = xyz.y
new_x = x * math.cos(rotation_angle) - y * math.sin(rotation_angle)
new_y = x * math.sin(rotation_angle) + y * math.cos(rotation_angle)
pose.residue(i).atom(atom_index).xyz(xyzVector_double_t(new_x, new_y, xyz.z))
# 保存为新的 PDB 文件
pose.dump_pdb('output.pdb')
RigidBodyTransMover 和RigidBodySpinMover工具实现
import pyrosetta
from pyrosetta.rosetta.protocols.rigid import RigidBodyTransMover, RigidBodySpinMover
from pyrosetta.rosetta.numeric import xyzVector_double_t
pyrosetta.init()
# 从 PDB 文件加载 pose
pose = pyrosetta.pose_from_pdb('input.pdb')
# 平移操作
trans_mover = RigidBodyTransMover(pose, 1) # 假设对第一个刚体进行平移
translation_vector = xyzVector_double_t(1.0, 2.0, 3.0)
# 设置平移方向,向translation_vector方向
trans_mover.trans_axis(translation_vector)
# 设置平移距离为 20 Å
trans_mover.step_size(20.0)
trans_mover.apply(pose)
# 旋转操作
spin_mover = RigidBodySpinMover # 假设对第一个刚体进行旋转
rotation_axis = xyzVector_double_t(0.0, 0.0, 1.0)
rotation_angle = 45.0 # 以度为单位
# 设置旋转轴
spin_mover.spin_axis(rotation_axis)
# 设置旋转角度的大小
spin_mover.spin_mag(rotation_angle)
spin_mover.apply(pose)
# 保存为新的 PDB 文件
pose.dump_pdb('output.pdb')
RigidBodySpinMover
和RigidBodyTransMover
是PyRosetta
中用于操作蛋白质结构刚体部分的重要工具,可以帮助研究人员模拟蛋白质的构象变化、探索结构空间以及进行蛋白质结构的优化和分析。