add no fix situation
This commit is contained in:
@@ -51,15 +51,12 @@ class LoopModelBuilder:
|
|||||||
logger: logging.Logger = field(init=False)
|
logger: logging.Logger = field(init=False)
|
||||||
pymol_instance: object = field(init=False)
|
pymol_instance: object = field(init=False)
|
||||||
analyzer_instance: PDBAnalyzer = field(init=False)
|
analyzer_instance: PDBAnalyzer = field(init=False)
|
||||||
runner_dir: Path = field(init=False)
|
|
||||||
pdb_id: str = field(init=False)
|
pdb_id: str = field(init=False)
|
||||||
|
|
||||||
def __post_init__(self):
|
def __post_init__(self):
|
||||||
self.pdb_id = self.pdb_file.stem
|
self.pdb_id = self.pdb_file.stem
|
||||||
self.output_dir = self.pdb_file.parent if self.output_dir is None else self.output_dir
|
self.output_dir = self.pdb_file.parent if self.output_dir is None else self.output_dir
|
||||||
self.runner_dir = self.output_dir / f"runner_{self.pdb_id}"
|
|
||||||
self.analyzer_instance = PDBAnalyzer(self.pdb_file)
|
self.analyzer_instance = PDBAnalyzer(self.pdb_file)
|
||||||
self.initialize_workdir()
|
|
||||||
self.setup_logging()
|
self.setup_logging()
|
||||||
self.initialize_pymol()
|
self.initialize_pymol()
|
||||||
|
|
||||||
@@ -75,15 +72,10 @@ class LoopModelBuilder:
|
|||||||
self.pymol_instance = pymol.cmd
|
self.pymol_instance = pymol.cmd
|
||||||
self.pymol_instance.reinitialize()
|
self.pymol_instance.reinitialize()
|
||||||
|
|
||||||
def initialize_workdir(self):
|
|
||||||
runner_dir = self.output_dir / f"runner_{self.pdb_file.stem}"
|
|
||||||
runner_dir.mkdir(exist_ok=True, parents=True)
|
|
||||||
self.runner_dir = runner_dir
|
|
||||||
|
|
||||||
def split_chains(self) -> dict:
|
def split_chains(self) -> dict:
|
||||||
split_dict = {}
|
split_dict = {}
|
||||||
for chain_id in self.analyzer_instance.chain_id_list:
|
for chain_id in self.analyzer_instance.chain_id_list:
|
||||||
chain_file = self.runner_dir / f"{self.analyzer_instance.pid}_{chain_id}.pdb"
|
chain_file = Path(f"{self.analyzer_instance.pid}_{chain_id}.pdb")
|
||||||
self.analyzer_instance.split_chain(chain_id).to_pdb(chain_file.as_posix())
|
self.analyzer_instance.split_chain(chain_id).to_pdb(chain_file.as_posix())
|
||||||
split_dict[chain_id] = chain_file.read_text()
|
split_dict[chain_id] = chain_file.read_text()
|
||||||
return split_dict
|
return split_dict
|
||||||
@@ -98,7 +90,7 @@ class LoopModelBuilder:
|
|||||||
self.merge_and_save_pdb(split_dict, pdb_id)
|
self.merge_and_save_pdb(split_dict, pdb_id)
|
||||||
|
|
||||||
def merge_and_save_pdb(self, pdb_strings: dict, pdb_id: str):
|
def merge_and_save_pdb(self, pdb_strings: dict, pdb_id: str):
|
||||||
merged_file = self.runner_dir / f"{pdb_id}_merged.pdb"
|
merged_file = Path(f"{pdb_id}_merged.pdb")
|
||||||
self.import_and_merge_pdb_strings(pdb_strings, "merged_object", merged_file)
|
self.import_and_merge_pdb_strings(pdb_strings, "merged_object", merged_file)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@@ -110,10 +102,8 @@ class LoopModelBuilder:
|
|||||||
return self.analyzer_instance.extract_sequences_info()
|
return self.analyzer_instance.extract_sequences_info()
|
||||||
|
|
||||||
def split_all_chains(self):
|
def split_all_chains(self):
|
||||||
sequences = self.analyzer_instance.extract_sequences(missing_char='-') # 或者 'X', 或者 ''
|
self.logger.info(f'Residues info for {self.pdb_file}: \n',self.sequences)
|
||||||
self.logger.info(f'Residues info for {self.pdb_file}: \n',sequences)
|
self.logger.info(f'Missing residues info for {self.pdb_file}:\n {self.missing_info}')
|
||||||
missing_info = self.analyzer_instance.extract_sequences_info()
|
|
||||||
self.logger.info(f'Missing residues info for {self.pdb_file}:\n {missing_info}')
|
|
||||||
split_dict = {} # split all chains
|
split_dict = {} # split all chains
|
||||||
for j in self.analyzer_instance.chain_id_list:
|
for j in self.analyzer_instance.chain_id_list:
|
||||||
fn = Path(f'{self.pdb_file.stem}_{j}.pdb')
|
fn = Path(f'{self.pdb_file.stem}_{j}.pdb')
|
||||||
@@ -123,6 +113,9 @@ class LoopModelBuilder:
|
|||||||
|
|
||||||
def model_missing_loops(self, typestr:str = 'refine.very_fast') -> dict:
|
def model_missing_loops(self, typestr:str = 'refine.very_fast') -> dict:
|
||||||
mc_dict = {}
|
mc_dict = {}
|
||||||
|
if not self.missing_info:
|
||||||
|
self.logger.info(f'No missing residues found in {self.pdb_file}. Skipping model_missing_loops.')
|
||||||
|
return mc_dict
|
||||||
for mc in self.missing_info:
|
for mc in self.missing_info:
|
||||||
out_file = f'5sws_{mc}.pdb'
|
out_file = f'5sws_{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
|
||||||
@@ -156,7 +149,7 @@ class LoopModelBuilder:
|
|||||||
mc_dict[mc] = pdbstr
|
mc_dict[mc] = pdbstr
|
||||||
return mc_dict
|
return mc_dict
|
||||||
else:
|
else:
|
||||||
print('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:
|
elif len(mc_fasta) == 0:
|
||||||
self.logger.warning(f'No chain {mc} found in PDB fasta file. Skipping chain {mc}.')
|
self.logger.warning(f'No chain {mc} found in PDB fasta file. Skipping chain {mc}.')
|
||||||
continue
|
continue
|
||||||
@@ -181,5 +174,5 @@ class LoopModelBuilder:
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
l = LoopModelBuilder(Path('./pdb_test1/1ao7.pdb'))
|
l = LoopModelBuilder(Path('./2vlk.pdb'))
|
||||||
l.run()
|
l.run()
|
||||||
Reference in New Issue
Block a user