Download model/refine/pyrosetta_ref.py from OneScience-Group/IgFold: direct link, hf CLI and curl.
- Browser
- Download file 3.22 kB
-
https://huggingface.co/OneScience-Group/IgFold/resolve/main/model/refine/pyrosetta_ref.py
- Command line
-
hf download hf://OneScience-Group/IgFold/model/refine/pyrosetta_ref.py
-
curl -L -o pyrosetta_ref.py https://huggingface.co/OneScience-Group/IgFold/resolve/main/model/refine/pyrosetta_ref.py
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) |