IgFold / model /refine /pyrosetta_ref.py
wuxing0105's picture
Upload folder using huggingface_hub
1fdc49a verified
Raw
History Blame Contribute Delete
3.22 kB
import pyrosetta
from igfold.utils.general import exists
def init_pyrosetta(init_string=None, silent=True):
if not exists(init_string):
init_string = "-mute all -ignore_zero_occupancy false -detect_disulf true -detect_disulf_tolerance 1.5 -check_cdr_chainbreaks false"
pyrosetta.init(init_string, silent=silent)
def get_min_mover(
max_iter: int = 1000,
sf_name: str = "ref2015_cst",
coord_cst_weight: float = 1,
dih_cst_weight: float = 1,
) -> pyrosetta.rosetta.protocols.moves.Mover:
"""
Create full-atom minimization mover
"""
sf = pyrosetta.create_score_function(sf_name)
sf.set_weight(
pyrosetta.rosetta.core.scoring.ScoreType.cart_bonded,
1,
)
sf.set_weight(
pyrosetta.rosetta.core.scoring.ScoreType.pro_close,
0,
)
sf.set_weight(
pyrosetta.rosetta.core.scoring.ScoreType.coordinate_constraint,
coord_cst_weight,
)
sf.set_weight(
pyrosetta.rosetta.core.scoring.ScoreType.dihedral_constraint,
dih_cst_weight,
)
mmap = pyrosetta.rosetta.core.kinematics.MoveMap()
mmap.set_bb(True)
mmap.set_chi(False)
mmap.set_jump(False)
min_mover = pyrosetta.rosetta.protocols.minimization_packing.MinMover(
mmap,
sf,
'lbfgs_armijo_nonmonotone',
0.0001,
True,
)
min_mover.max_iter(max_iter)
min_mover.cartesian(True)
return min_mover
def get_fa_relax_mover(
max_iter: int = 100) -> pyrosetta.rosetta.protocols.moves.Mover:
"""
Create full-atom relax mover
"""
sf = pyrosetta.create_score_function('ref2015_cst')
mmap = pyrosetta.rosetta.core.kinematics.MoveMap()
mmap.set_bb(True)
mmap.set_chi(True)
mmap.set_jump(True)
relax = pyrosetta.rosetta.protocols.relax.FastRelax()
relax.set_scorefxn(sf)
relax.max_iter(max_iter)
relax.set_movemap(mmap)
return relax
def get_repack_mover():
tf = pyrosetta.rosetta.core.pack.task.TaskFactory()
tf.push_back(
pyrosetta.rosetta.core.pack.task.operation.InitializeFromCommandline())
tf.push_back(
pyrosetta.rosetta.core.pack.task.operation.RestrictToRepacking())
packer = pyrosetta.rosetta.protocols.minimization_packing.PackRotamersMover(
)
packer.task_factory(tf)
return packer
def refine(out_pdb_file,
pdb_string,
minimization_iter=100,
constrain=True,
idealize=False):
# create new pose
pose = pyrosetta.rosetta.core.pose.Pose()
pyrosetta.rosetta.core.import_pose.pose_from_pdbstring(
pose,
pdb_string,
)
if constrain:
cst_mover = pyrosetta.rosetta.protocols.relax.AtomCoordinateCstMover()
cst_mover.cst_sidechain(False)
cst_mover.apply(pose)
min_mover = get_min_mover(
max_iter=minimization_iter,
coord_cst_weight=1,
dih_cst_weight=0,
)
min_mover.apply(pose)
if idealize:
idealize_mover = pyrosetta.rosetta.protocols.idealize.IdealizeMover()
idealize_mover.apply(pose)
packer = get_repack_mover()
packer.apply(pose)
min_mover.apply(pose)
pose.dump_pdb(out_pdb_file)