def _save_pdb(project: Project, pdb_id, filename, pdb_data): name = path.splitext(filename)[0] nohet_filename = f"{name}_noHETATM.pdb" noanisou_filename = f"{name}_noANISOU.pdb" nohetanisou_filename = f"{name}_noANISOU_noHETATM.pdb" txc_filename = f"{name}_txc.pdb" orig_pdb = _add_pdb_entry(project, filename, pdb_id) nohet_pdb = _add_pdb_entry(project, nohet_filename, pdb_id) noanisou_pdb = _add_pdb_entry(project, noanisou_filename, pdb_id) nohetnoanisou_pdb = _add_pdb_entry(project, nohetanisou_filename, pdb_id) # write original pdb file 'as-is' to models folder with open_proj_file(project, project.get_pdb_file(orig_pdb)) as dest: dest.write(pdb_data) # filter out all non-ATOM entries from pdb and write it as *_noHETATM.pdb with open_proj_file(project, project.get_pdb_file(nohetnoanisou_pdb)) as dest: for line in pdb_data.splitlines(keepends=True): if not line.startswith(b"HETATM") or not line.startswith(b"ANISOU"): dest.write(line) with open_proj_file(project, project.get_pdb_file(nohet_pdb)) as dest: for line in pdb_data.splitlines(keepends=True): if not line.startswith(b"HETATM"): dest.write(line) with open_proj_file(project, project.get_pdb_file(noanisou_pdb)) as dest: for line in pdb_data.splitlines(keepends=True): if not line.startswith(b"ANISOU"): dest.write(line) n_chains = pdb_chains(pdb_data.splitlines(keepends=True)) if n_chains > 1: txc_pdb = _add_pdb_entry(project, txc_filename, pdb_id) input_pdb_name = path.join(project.models_dir, f"{name}.pdb") jobs = JobsSet("phenix ensembler") batch = SITE.get_hpc_runner().new_batch_file( "phenix ensembler", project_script(project, "phenix_ensembler.sh"), project_syslog_path(project, "phenix_ensembler_%j.out"), project_syslog_path(project, "phenix_ensembler_%j.err"), ) batch.load_modules(["gopresto", PHENIX_MOD]) batch.add_commands( f"cd {project.models_dir}", f"phenix.ensembler {input_pdb_name} trim=TRUE output.location='{project.models_dir}'", f"mv {project.models_dir}/ensemble_merged.pdb {project.get_pdb_file(txc_pdb)}", ) batch.save() jobs.add_job(batch) jobs.submit()
def _delete_pdb(project: Project, pdb): project.get_pdb_file(pdb).unlink() pdb.delete()