File size: 3,222 Bytes
1fdc49a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | 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) |