Source code for pyrosetta_help.score_mutants.mutation

import pyrosetta
import re


[docs]class Mutation: """ A mutation is an object that has all the details of the mutation. A variant, as interpreted in ``Model.score_mutations`` is a pose with a mutation. """ _name3 = {'A': 'ALA', 'C': 'CYS', 'D': 'ASP', 'E': 'GLU', 'F': 'PHE', 'G': 'GLY', 'H': 'HIS', 'I': 'ILE', 'L': 'LEU', 'K': 'LYS', 'M': 'MET', 'N': 'ASN', 'P': 'PRO', 'Q': 'GLN', 'R': 'ARG', 'S': 'SER', 'T': 'THR', 'V': 'VAL', 'W': 'TRP', 'Y': 'TYR'}
[docs] def __init__(self, mutation_name: str, chain: str, pose: pyrosetta.Pose): self.mutation = self.parse_mutation(mutation_name) rex = re.match('(\w)(\d+)(\w)', self.mutation) self.pdb_resi = int(rex.group(2)) self.chain = chain self.from_resn1 = rex.group(1) self.from_resn3 = self._name3[rex.group(1)] self.to_resn1 = rex.group(3) self.to_resn3 = self._name3[rex.group(3)] pose2pdb = pose.pdb_info().pdb2pose self.pose_resi = pose2pdb(res=self.pdb_resi, chain=self.chain) if self.pose_resi != 0: self.pose_residue = pose.residue(self.pose_resi) self.pose_resn1 = self.pose_residue.name1() self.pose_resn3 = self.pose_residue.name3() else: self.pose_residue = None self.pose_resn1 = None self.pose_resn3 = None
[docs] def parse_mutation(self, mutation: str): if mutation[:2] == 'p.': mutation = mutation.replace('p.', '') if mutation[1].isdigit(): return mutation else: value2key = lambda value: list(self._name3.keys())[list(self._name3.values()).index(value.upper())] return value2key(mutation[:3]) + mutation[3:-3] + value2key(mutation[-3:])
[docs] def is_valid(self): return self.pose_resn1 == self.from_resn1
[docs] def assert_valid(self): assert self.is_valid(), f'residue {self.pose_resi}(pose)/{self.pdb_resi}(pdb) ' + \ f'is a {self.pose_resn3}, not a {self.from_resn3}'
def __str__(self): return self.mutation