use MAS to search fit sequence
This commit is contained in:
@@ -18,6 +18,7 @@ from build_modeller import PDBModeler
|
|||||||
from modeller import ModellerError
|
from modeller import ModellerError
|
||||||
import pymol
|
import pymol
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
from Bio.SeqRecord import SeqRecord
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class PDBAlign:
|
class PDBAlign:
|
||||||
@@ -118,7 +119,7 @@ class LoopModelBuilder:
|
|||||||
split_dict[j]=fn.read_text()
|
split_dict[j]=fn.read_text()
|
||||||
return split_dict
|
return split_dict
|
||||||
|
|
||||||
def model_missing_loops(self, typestr:str = 'refine.very_fast') -> dict:
|
def model_missing_loops(self, typestr:str = 'refine.very_fast', buildnumber: str = 1) -> dict:
|
||||||
mc_dict = {}
|
mc_dict = {}
|
||||||
if not self.missing_info:
|
if not self.missing_info:
|
||||||
self.logger.info(f'No missing residues found in {self.pdb_file}. Skipping model_missing_loops.')
|
self.logger.info(f'No missing residues found in {self.pdb_file}. Skipping model_missing_loops.')
|
||||||
@@ -126,14 +127,13 @@ class LoopModelBuilder:
|
|||||||
for mc in self.missing_info:
|
for mc in self.missing_info:
|
||||||
out_file = f'{self.pdb_id}_{mc}.pdb'
|
out_file = f'{self.pdb_id}_{mc}.pdb'
|
||||||
self.analyzer_instance.split_chain(mc).to_pdb(out_file) # get misschain pdb file
|
self.analyzer_instance.split_chain(mc).to_pdb(out_file) # get misschain pdb file
|
||||||
mc_fasta = self.analyzer_instance.filter_sequences(mc) # get misschain fasta file
|
mc_fasta = self.analyzer_instance.find_most_similar(self.sequences[mc]) # get misschain fasta file
|
||||||
if len(mc_fasta) == 1:
|
mc_fasta_record = SeqRecord(mc_fasta, id=f'{mc}', description=f'{self.pdb_id}|{mc}')
|
||||||
mc_fasta = mc_fasta[0]
|
|
||||||
out_fasta_file = Path(f'{self.analyzer_instance.pid}_{mc}.fasta')
|
out_fasta_file = Path(f'{self.analyzer_instance.pid}_{mc}.fasta')
|
||||||
self.analyzer_instance.write_seq_to_fasta_single_line(mc_fasta, out_fasta_file)
|
self.analyzer_instance.write_seq_to_fasta_single_line(mc_fasta_record, out_fasta_file)
|
||||||
self.logger.info(f'>{mc_fasta.description}')
|
self.logger.info(f'>{self.pdb_id}|{mc}|{self.missing_info[mc]}|{len(mc_fasta)}')
|
||||||
self.logger.info(mc_fasta.seq)
|
self.logger.info(mc_fasta)
|
||||||
modeller = PDBModeler(self.pdb_file, out_fasta_file, Path('.'), mc, 1, typestr)
|
modeller = PDBModeler(self.pdb_file, out_fasta_file, Path(f'./{self.pdb_id}modellerfix_{mc}'), mc, buildnumber, typestr)
|
||||||
try:
|
try:
|
||||||
modeller_results = modeller.make_model()
|
modeller_results = modeller.make_model()
|
||||||
except ModellerError as mod_err:
|
except ModellerError as mod_err:
|
||||||
@@ -157,11 +157,7 @@ class LoopModelBuilder:
|
|||||||
return mc_dict
|
return mc_dict
|
||||||
else:
|
else:
|
||||||
self.logger.warning('more than one model file, please set num_loop to 1')
|
self.logger.warning('more than one model file, please set num_loop to 1')
|
||||||
elif len(mc_fasta) == 0:
|
return mc_dict
|
||||||
self.logger.warning(f'No chain {mc} found in PDB fasta file. Skipping chain {mc}.')
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
raise ValueError(f'only can fix one chain content: {mc_fasta}')
|
|
||||||
|
|
||||||
def run(self, typestr:str = 'refine.very_fast'):
|
def run(self, typestr:str = 'refine.very_fast'):
|
||||||
split_dict = self.split_all_chains()
|
split_dict = self.split_all_chains()
|
||||||
|
|||||||
Reference in New Issue
Block a user