!pip install pyrosettacolabsetup
import pyrosettacolabsetup; pyrosettacolabsetup.install_pyrosetta()
import pyrosetta; pyrosetta.init()
from pyrosetta import *
from pyrosetta.teaching import *
init()
### BEGIN SOLUTION
polyA = pyrosetta.pose_from_sequence('A' * 10)
### END SOLUTION
polyA.pdb_info().name("polyA")
### BEGIN SOLUTION
print("phi: %i" %polyA.phi(9))
print("psi: %i" %polyA.psi(9))
### END SOLUTION
phi: 180
psi: 180
pmm = PyMOLMover()
pmm.keep_history(True)
pmm.apply(polyA)
import math
import random
def randTrial(your_pose):
### BEGIN SOLUTION
randNum = random.randint(2, your_pose.total_residue())
currPhi = your_pose.phi(randNum)
currPsi = your_pose.psi(randNum)
newPhi = random.gauss(currPhi, 25)
newPsi = random.gauss(currPsi, 25)
your_pose.set_phi(randNum,newPhi)
your_pose.set_psi(randNum,newPsi)
pmm.apply(your_pose)
### END SOLUTION
return your_pose
sfxn = get_fa_scorefxn()
def score(your_pose):
### BEGIN SOLUTION
return sfxn(your_pose)
### END SOLUTION
def decision(before_pose, after_pose):
### BEGIN SOLUTION
E = score(after_pose) - score(before_pose)
if E < 0:
return after_pose
elif random.uniform(0, 1) >= math.exp(-E/1):
return before_pose
else:
return after_pose
### END SOLUTION
def basic_folding(your_pose):
"""Your basic folding algorithm that completes 100 Monte-Carlo iterations on a given pose"""
lowest_pose = Pose() # Create an empty pose for tracking the lowest energy pose.
### BEGIN SOLUTION
for i in range(100):
if i == 0:
lowest_pose.assign(your_pose)
before_pose = Pose()
before_pose.assign(your_pose) # keep track of pose before random move
after_pose = Pose()
after_pose.assign(randTrial(your_pose)) # do random move and store the pose
your_pose.assign(decision(before_pose, after_pose)) # keep the new pose or old pose
if score(your_pose) < score(lowest_pose): # updating lowest pose
lowest_pose.assign(your_pose)
print("Iteration # %i" %i) # output
print("Current pose score: %1.3f" %score(your_pose)) # output
print("Lowest pose score: %1.3f" %score(lowest_pose)) # output
### END SOLUTION
return lowest_pose
from IPython.display import Image
Image('./Media/folding.gif',width='300')
import pyrosetta
from pyrosetta import pose_from_sequence
# 初始化
pyrosetta.init()
# 创建10个丙氨酸的序列
sequence = "AAAAAAAAAA"
# 创建pose
pose = pose_from_sequence(sequence, 'fa_standard')
# 设置α螺旋的理想二面角
for i in range(1, 11): # 10个残基
if i > 1: # 第一个残基没有φ角
pose.set_phi(i, -57.0) # α螺旋的典型φ角
if i < 10: # 最后一个残基没有ψ角
pose.set_psi(i, -47.0) # α螺旋的典型ψ角
# 评分
scorefxn = pyrosetta.create_score_function('ref2015')
score = scorefxn(pose)
print(f"理想α螺旋的得分: {score:.2f}")
# 发送到PyMOL查看
pmm = pyrosetta.PyMOLMover()
pmm.apply(pose)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。