!pip install pyrosettacolabsetup
import pyrosettacolabsetup; pyrosettacolabsetup.install_pyrosetta()
import pyrosetta; pyrosetta.init()
from pyrosetta import *
from pyrosetta.teaching import *
init()
pose = pose_from_pdb("inputs/5tj3.pdb")
resid = pose.pdb_info().pdb2pose('A', 28)
res_28 = pose.residue(resid)
N28 = AtomID(res_28.atom_index("N"), resid)
CA28 = AtomID(res_28.atom_index("CA"), resid)
C28 = AtomID(res_28.atom_index("C"), resid)
from IPython.display import Image
Image('./Media/init-path.png',width='700')
one_res_seq = "V"
pose_one_res = pose_from_sequence(one_res_seq)
print(pose_one_res.sequence())
N_xyz = pose_one_res.residue(1).xyz("N")
CA_xyz = pose_one_res.residue(1).xyz("CA")
C_xyz = pose_one_res.residue(1).xyz("C")
print((CA_xyz - N_xyz).norm())
print((CA_xyz - C_xyz).norm())
1.458004
1.52326
angle = pose.conformation().bond_angle(N28, CA28, C28)
print(angle)
1.913188766577386
import math
angle*180/math.pi
109.61764173672383
# 导入PyRosetta
import pyrosetta
from pyrosetta import rosetta
import math
# 确保已经初始化
pyrosetta.init()
# 假设pose已经包含你的蛋白质结构
# pose = pyrosetta.pose_from_pdb("your_protein.pdb")
# 定义要计算psi角的残基序号
resid = 28 # 残基A:28
# 获取指定残基的N, CA, C原子的xyz坐标
# 注意:Rosetta中原子索引是固定的,N=1, CA=2, C=3
N = pose.residue(resid).xyz("N")
CA = pose.residue(resid).xyz("CA")
C = pose.residue(resid).xyz("C")
# 获取下一个残基的N原子坐标(对于psi角计算需要)
N_next = pose.residue(resid + 1).xyz("N")
# 计算三个关键向量
# 向量1: CA -> N
vector_CA_to_N = N - CA
# 向量2: CA -> C
vector_CA_to_C = C - CA
# 向量3: C -> N_next (下一个残基的N)
vector_C_to_N_next = N_next - C
# 计算二面角psi所需的四个平面
# psi角定义为: N(i)-CA(i)-C(i)-N(i+1) 的二面角
# 计算两个法向量
# 平面1的法向量 (N-CA-C)
vector1 = vector_CA_to_N
vector2 = vector_CA_to_C
normal1 = vector1.cross(vector2)
# 平面2的法向量 (CA-C-N_next)
vector3 = -vector_CA_to_C # C->CA 的反向向量
vector4 = vector_C_to_N_next
normal2 = vector3.cross(vector4)
# 计算psi角
# 使用点积公式计算二面角
cos_psi = normal1.dot(normal2) / (normal1.norm() * normal2.norm())
psi_rad = math.acos(cos_psi)
# 确定二面角符号(使用右手法则)
if normal1.dot(vector4) < 0:
psi_rad = -psi_rad
# 转换为角度
psi_deg = math.degrees(psi_rad)
print(f"Residue A:{resid} 的psi角: {psi_deg:.2f}°")
# 更简单的方法:使用PyRosetta内置函数验证
# Rosetta可以直接计算任何二面角
calculated_psi = pose.psi(resid)
print(f"使用PyRosetta内置函数验证: {calculated_psi:.2f}°")
# three alanines
tripeptide = pose_from_sequence("AAA")
orig_phi = tripeptide.phi(2)
orig_psi = tripeptide.psi(2)
print("original phi:", orig_phi)
print("original psi:", orig_psi)
# print the xyz coordinates of the CB atom of residue 2 here BEFORE setting
### BEGIN SOLUTION
print("xyz coordinates:", tripeptide.residue(2).xyz("CB"))
### END SOLUTION
original phi: 180.0
original psi: 180.0
xyz coordinates: 3.535270304899897 3.659035776744378 1.199094204197625
# set the phi and psi here
### BEGIN SOLUTION
tripeptide.set_phi(2, -60)
tripeptide.set_psi(2, -43)
print("new phi:", tripeptide.phi(2))
print("new psi:", tripeptide.psi(2))
### END SOLUTION
# print the xyz coordinates of the CB atom of residue 2 here AFTER setting
### BEGIN SOLUTION
print("xyz coordinates:", tripeptide.residue(2).xyz("CB"))
### END SOLUTION
# did changing the phi and psi angle change the xyz coordinates of the CB atom of alanine 2?
xyz coordinates: 5.498535447297188 2.671616235800968 0.06968570437453583
print(pose)
PDB file name: 5tj3.pdb
Total residues:524
Sequence: NAVPRPKLVVGLVVDQMRWDYLYRYYSKYGEGGFKRMLNTGYSLNNVHIDYVPTVTAIGHTSIFTGSVPSIHGIAGNDWYDKELGKSVYCTSDETVQPVGTTSNSVGQHSPRNLWSTTVTDQLGLATNFTSKVVGVSLKDRASILPAGHNPTGAFWFDDTTGKFITSTYYTKELPKWVNDFNNKNVPAQLVANGWNTLLPINQYTESSEDNVEWEGLLGSKKTPTFPYTDLAKDYEAKKGLIRTTPFGNTLTLQMADAAIDGNQMGVDDITDFLTVNLASTDYVGHNFGPNSIEVEDTYLRLDRDLADFFNNLDKKVGKGNYLVFLSADHGAAHSVGFMQAHKMPTGFFDMKKEMNAKLKQKFGADNIIAAAMNYQVYFDRKVLADSKLELDDVRDYVMTELKKEPSVLYVLSTDEIWESSIPEPIKSRVINGYNWKRSGDIQIISKDGYLSAYSKKGTTHSVWNSYDSHIPLLFMGWGIKQGESNQPYHMTDIAPTVSSLLKIQFPSGAVGKPITEVIGZZZZ
Fold tree:
FOLD_TREE EDGE 1 520 -1 EDGE 1 521 1 EDGE 1 522 2 EDGE 1 523 3 EDGE 1 524 4
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。