diff --git a/modelbuilder.py b/modelbuilder.py index 343cee8..0c06f92 100644 --- a/modelbuilder.py +++ b/modelbuilder.py @@ -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() \ No newline at end of file + l = LoopModelBuilder(Path('./2vlk.pdb')) + l.run()