add no fix situation
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user