Assign Mutant

Briefs

The target for this tutorial to mutate the target protein at defined residue(s). The main function provided are assign_mutant() and mutate_stru(), in which assign_mutant() assigns mutants targeted in the study. Decode the user assigned {pattern} based on the {stru} and get a list of mutants defined by a list of mutation objects each.

Input/Output

Input

stru

the target protein structure intended for mutation, represented as a Structure() object.

How to obtain

A Strutcure() object can be obtained by these APIs.
pattern

specifies the residue(s) targeted for mutation, need to be clarified.

How to obtain

The pattern can be written with the syntax Pattern Syntax.
chain_sync_list

a list that identifies homologous chains in the multimer protein, need to be clarified.

How to obtain

The chain_sync_list can be written as a list like [(A,C),(B,D)] to indicate homo-chains in enzyme ploymer (like dimer). Mutations will be copied to the correpondinhomo-chains as it is maybe experimentally impossible to only do mutations on one chain of a homo-dimer enzyme.
chain_index_mapper

a dictionary mapping the residue indices for each chain in the multimer protein, need to be clarified.

How to obtain

The chain_index_mapper need to be clarified in cases that residue index in each chain is not aligned. | e.g.: for a pair of homo-dimer below: | “A”: ABCDEFG (start from 7) | “B”: BCDEFGH (start from 14) | the chain_sync_mapper should be {"A":0, "B":6} and index conversion is done by A_res_idx - 0 + 6 = B_res_idx

Output

mutation

a list of mutants defined each by a list of Mutation objects.

NOTE: this function generates WT as [] or [Mutation(None, "WT", None, None)] unless directly indication. Act accordingly.

Mutant Pattern

Basic usage example

  • Generate a mutant with a single-point mutation: R378E

    test_A = "test_A.pdb"
    test_A_stru = PDBParser.get_structure(test_A)
    test_mutation_pattern_A = "R378E"
    mutants_A = mapi.assign_mutant(test_A_stru, test_mutation_pattern_A)
    print(mutants_A)
    #[[('ARG','GLU','A',378)]]
    

Chemistry-inspired example

  • Mutate residues using the protein with the LIG substrate near the binding pocket, defined as residues within 5 Å of LIG, to increase pocket volume. Not all residues need to be force mutated.

    test_A = "test_A.pdb"
    test_A_stru = PDBParser.get_structure(test_A)
    test_mutation_pattern_A = "a:[byres resn LIG around 5:smaller]"
    mutants_A = mapi.assign_mutant(test_A_stru, test_mutation_pattern_A)
    print(mutants_A)
    

Arguments

stru

the target protein structure for mutation represented as Structure()

pattern:

the pattern that defines the mutation. (See Mutant Pattern section)

chain_sync_list:

A list to indicate homo-chains in enzyme ploymer (like dimer). (See Input/Output section)

random_state:

The int() seed for the random number generator. Default value is 100.

chain_index_mapper:

A dictionary that need to be clarified in cases that residue index in each chain is not aligned. (See Input/Output section)

if_check

if or not checking if each mutation is valid. (This could be pretty slow if the mutant is >10^7 level)

Example Code

1. Assign mutants for a monomer protein

In this example, we perform assign mutations on a monomer protein structure.

How input is prepared

stru

obtained by reading from a PDB file using PDBParser().get_structure() (See Details)

pattern

defined as pattern syntax (See Details)

from enzy_htp.structure import PDBParser
import enzy_htp.mutation.api as mapi
test_A = "test_A.pdb"
test_A_stru = PDBParser.get_structure(test_A)
test_mutation_pattern_A = (
        "GA11A, {NA176W, PA51A},"
        " {L56A, r:2[resi 254 around 3:all not self]*5}"
        )
mutants_A = mapi.assign_mutant(test_A_stru, test_mutation_pattern_A)
print(mutants_A)

2. Assign mutants for a two-chain protein

In this example, we perform assign mutations on a two-chainr protein structure, in which A and B are homologous chains.

How input is prepared

stru

obtained by reading from a PDB file using PDBParser().get_structure() (See Details)

pattern

defined as pattern syntax (See Details)

chain_sync_list

defined according to the structure, there are two chains (A and B) (See Details)

chain_index_mapper

defined according to the structure, there are two chains (A and B) both start from the same residue index (See Details)

from enzy_htp.structure import PDBParser
import enzy_htp.mutation.api as mapi
test_A_B = "test_A_B.pdb"
test_A_B_stru = PDBParser.get_structure(test_A_B)
test_mutation_pattern_A_B = "{GA11A, NB176W, PB51A}"
mutation_pattern_A_B = mapi.assign_mutant(test_A_B_stru,
                                          test_mutation_pattern_A_B,
                                          chain_sync_list=[("A", "B")],
                                          chain_index_mapper{"A": 0, "B": 0})
print(mutation_pattern_A_B)

3. Assign mutants for a four-chain protein

In this example, we perform assign mutations on a four-chainr protein structure, in which A and B are homologous chains, and C and D are homologous chains distinct from A and B.

How input is prepared

stru

obtained by reading from a PDB file using PDBParser().get_structure() (See Details)

pattern

defined as pattern syntax (See Details)

chain_sync_list

defined according to the structure, there are four chains (A, B, C, and D), A and B are same subunits, C and D are same subunits (See Details)

chain_index_mapper

defined according to the structure, A & B and C & D start from the same residue index (See Details)

from enzy_htp.structure import PDBParser
import enzy_htp.mutation.api as mapi
test_A_B_C_D = "test_A_B_C_D.pdb"
test_A_B_C_D_stru = PDBParser.get_structure(test_A_B_C_D)
test_mutation_pattern_A_B_C_D = "{TA391A, RC58A}"
mutation_pattern_A_B_C_D = mapi.assign_mutant(test_A_B_C_D_stru,
                                              test_mutation_pattern_A_B_C_D,
                                              chain_sync_list=[("A", "B"), ("C","D")],
                                              chain_index_mapper={"A": 0, "B": 0, "C": 0, "D": 0})
print(mutation_pattern_A_B_C_D)

Author: Xingyu Ouyang <ouyangxingyu913@gmail.com>