first version
This commit is contained in:
66
script/mutagenesis.py
Normal file
66
script/mutagenesis.py
Normal file
@@ -0,0 +1,66 @@
|
||||
# 定义残基突变函数
|
||||
from pymol import cmd
|
||||
from pathlib import Path
|
||||
def Mutagenesis_site(filename: Path, mutation_type: str, site: int, outfile: Path = None) -> Path:
|
||||
"""Mutagenesis_site Mutagenesis residue in site
|
||||
residue site have mutil conformations, need to select one conformations, some error accured.
|
||||
pass
|
||||
_extended_summary_
|
||||
|
||||
Arguments:
|
||||
filename {str} -- PDB file format
|
||||
mutation_type {str} -- 'VAL' for ALA TO VAL; 'ALA' for any/not ALA to ALA; 'GLY' for ALA to GLY
|
||||
site {int} -- residue site in pdbfile
|
||||
|
||||
Keyword Arguments:
|
||||
outfile {str} -- _description_ (default: {None})
|
||||
|
||||
Raises:
|
||||
ValueError: not one object in PDBs,need to fix
|
||||
|
||||
Returns:
|
||||
str -- save mutagenesis file path
|
||||
"""
|
||||
p = Path(filename)
|
||||
savename = p.stem + f"_{site}_mutation.pdb"
|
||||
_out_file = Path(outfile) if outfile else p.absolute().parent.joinpath(savename)
|
||||
if not _out_file.absolute().parent.exists(): _out_file.absolute().parent.mkdir(parents=True)
|
||||
cmd.reinitialize('everything') # ! clean up
|
||||
cmd.load(filename.as_posix())
|
||||
PDBs = cmd.get_names()
|
||||
# Get the ID numbers of c-alpha (CA) atoms of all residues
|
||||
if len(PDBs) == 1:
|
||||
PDB = PDBs[0]
|
||||
else:
|
||||
raise ValueError(f'this pdb have more than one object!PDBs:{PDBs}')
|
||||
CAindex = cmd.identify(f"{PDB} and name CA")
|
||||
pdbstrList = [cmd.get_pdbstr("%s and id %s" % (PDB, CAid)).splitlines() for CAid in CAindex]
|
||||
ProtChainResiList = [[PDB, i[0][21], i[0][22:26].strip()] for i in pdbstrList]
|
||||
for i, j, k in ProtChainResiList:
|
||||
if int(k) == int(site):
|
||||
cmd.wizard("mutagenesis")
|
||||
# print(i,j,k)
|
||||
cmd.refresh_wizard()
|
||||
cmd.get_wizard().set_mode(mutation_type)
|
||||
##Possible mutation_type could be:
|
||||
##'VAL' for ALA TO VAL
|
||||
##'ALA' for any/not ALA to ALA
|
||||
##'GLY' for ALA to GLY
|
||||
# 'selection' will select each residue that you have selected
|
||||
# on ProtChainResiList above using the PDBid,chain,and residue
|
||||
# present on your pdb file.If you didn't select a range on
|
||||
# ProteinChainResiList, it will do the mutation on all the residues
|
||||
# present in your protein.
|
||||
selection = f"/{i}//{j}/{k}"
|
||||
# Print selection to check the output
|
||||
# print(selection)
|
||||
# Selects where to place the mutation
|
||||
cmd.get_wizard().do_select(selection)
|
||||
##Applies mutation
|
||||
cmd.get_wizard().apply()
|
||||
# Save each mutation and reinitialize the session before the next mutation
|
||||
##to have pdb files only with the residue-specific single-point mutation you were interested.
|
||||
cmd.set_wizard("done")
|
||||
cmd.save(_out_file.as_posix(), f"{PDB}")
|
||||
cmd.reinitialize('everything') # Reinitialize PyMOL to default settings.
|
||||
return _out_file
|
||||
Reference in New Issue
Block a user