add no fix situation

This commit is contained in:
2024-01-12 10:36:29 +08:00
parent 722edbd4fc
commit c241916267

View File

@@ -51,15 +51,12 @@ class LoopModelBuilder:
logger: logging.Logger = field(init=False)
pymol_instance: object = field(init=False)
analyzer_instance: PDBAnalyzer = field(init=False)
runner_dir: Path = field(init=False)
pdb_id: str = field(init=False)
def __post_init__(self):
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.runner_dir = self.output_dir / f"runner_{self.pdb_id}"
self.analyzer_instance = PDBAnalyzer(self.pdb_file)
self.initialize_workdir()
self.setup_logging()
self.initialize_pymol()
@@ -75,15 +72,10 @@ class LoopModelBuilder:
self.pymol_instance = pymol.cmd
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:
split_dict = {}
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())
split_dict[chain_id] = chain_file.read_text()
return split_dict
@@ -98,7 +90,7 @@ class LoopModelBuilder:
self.merge_and_save_pdb(split_dict, pdb_id)
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)
@property
@@ -110,10 +102,8 @@ class LoopModelBuilder:
return self.analyzer_instance.extract_sequences_info()
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',sequences)
missing_info = self.analyzer_instance.extract_sequences_info()
self.logger.info(f'Missing residues info for {self.pdb_file}:\n {missing_info}')
self.logger.info(f'Residues info for {self.pdb_file}: \n',self.sequences)
self.logger.info(f'Missing residues info for {self.pdb_file}:\n {self.missing_info}')
split_dict = {} # split all chains
for j in self.analyzer_instance.chain_id_list:
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:
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:
out_file = f'5sws_{mc}.pdb'
self.analyzer_instance.split_chain(mc).to_pdb(out_file) # get misschain pdb file
@@ -156,7 +149,7 @@ class LoopModelBuilder:
mc_dict[mc] = pdbstr
return mc_dict
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:
self.logger.warning(f'No chain {mc} found in PDB fasta file. Skipping chain {mc}.')
continue
@@ -181,5 +174,5 @@ class LoopModelBuilder:
if __name__ == "__main__":
l = LoopModelBuilder(Path('./pdb_test1/1ao7.pdb'))
l.run()
l = LoopModelBuilder(Path('./2vlk.pdb'))
l.run()