Source code for pyrosetta_help.common_ops.minimize

import os
from typing import (Optional)

import pyrosetta

__all__ = ['get_local_scorefxn',
           'prep_ED',
           'get_local_relax',
           'do_local_relax',
           'do_chainwise_relax']

[docs]def get_local_scorefxn() -> pyrosetta.ScoreFunction: ## local scorefxn w/ ED # ---------- Local weights ------------------ # these are mostly the same except for the line: # <Set scale_sc_dens_byres="E:0.56,D:0.56,R:0.76,K:0.76,M:0.76,C:0.81,Q:0.81,H:0.81,N:0.81,T:0.81,S:0.81, # Y:0.88,W:0.88,A:0.88,F:0.88,P:0.88,I:0.88,L:0.88,V:0.88"/> # which is an utter mystery. weights = {"cart_bonded_length": 0.5, "cart_bonded_torsion": 0.5, "cart_bonded_angle": 1.0, "pro_close": 0.0, "fa_sol": 0.0, "elec_dens_fast": 30, # <-- ED "rama": 0.0, "rama_prepro": 1.0} scorefxn_local = pyrosetta.create_score_function('ref2015_cart') stm = pyrosetta.rosetta.core.scoring.ScoreTypeManager() for name, value in weights.items(): scorefxn_local.set_weight(stm.score_type_from_name(name), value) return scorefxn_local
[docs]def prep_ED(pose: pyrosetta.Pose, map_filename: str) -> pyrosetta.rosetta.core.scoring.electron_density.ElectronDensity: # rmsd & ED fit if os.path.splitext(map_filename) == '.gz': raise Exception('The file is gzipped') rmsd = pyrosetta.rosetta.core.simple_metrics.metrics.RMSDMetric(pose) ED = pyrosetta.rosetta.core.scoring.electron_density.getDensityMap(map_filename) initial_fit = ED.matchPose(pose) # This is redundant with ED. map_mover = pyrosetta.rosetta.protocols.cryst.LoadDensityMapMover(map_filename) map_mover.apply(pose) # This is redundant with map sdsm = pyrosetta.rosetta.protocols.electron_density.SetupForDensityScoringMover() sdsm.apply(pose) return ED
[docs]def get_local_relax(scorefxn: Optional[pyrosetta.ScoreFunction] = None, ncyc: int = 3, nexp: int = 2) -> pyrosetta.rosetta.protocols.relax.LocalRelax: if scorefxn is None: scorefxn = get_local_scorefxn() # <LocalRelax name="local_rlx" scorefxn="dens" max_iter="100" ncyc="1" ramp_cart="0" K="16" nexp="2"/> relax = pyrosetta.rosetta.protocols.relax.LocalRelax() relax.set_sfxn(scorefxn) relax.set_K(16) relax.set_max_iter(100) relax.set_ncyc(ncyc) relax.set_nexp(nexp) return relax
[docs]def do_local_relax(pose: pyrosetta.Pose, scorefxn: Optional[pyrosetta.ScoreFunction] = None) -> None: get_local_relax(scorefxn).apply(pose)
[docs]def do_chainwise_relax(pose: pyrosetta.Pose, scorefxn: Optional[pyrosetta.ScoreFunction] = None, cycles: int = 5) -> None: if scorefxn is None: scorefxn = pyrosetta.get_fa_scorefxn() for chain_i in range(1, pose.num_chains() + 1): chain_sele = pyrosetta.rosetta.core.select.residue_selector.ChainSelector(chain_i) chain_vector = chain_sele.apply(pose) movemap = pyrosetta.MoveMap() movemap.set_bb(allow_bb=chain_vector) movemap.set_chi(allow_chi=chain_vector) relax = pyrosetta.rosetta.protocols.relax.FastRelax(scorefxn, cycles) relax.set_movemap(movemap) relax.apply(pose)