Download scripts/paper_resources/analysis_scripts/run_haddock.py from OneScience-Group/CombFold: direct link, hf CLI and curl.
- Browser
- Download file 3.31 kB
-
https://huggingface.co/OneScience-Group/CombFold/resolve/main/scripts/paper_resources/analysis_scripts/run_haddock.py
- Command line
-
hf download hf://OneScience-Group/CombFold/scripts/paper_resources/analysis_scripts/run_haddock.py
-
curl -L -o run_haddock.py https://huggingface.co/OneScience-Group/CombFold/resolve/main/scripts/paper_resources/analysis_scripts/run_haddock.py
3.31 kB
| import os | |
| """ | |
| This assumes you already in haddock environment | |
| bash | |
| conda activate haddock2.4 | |
| source {PROJECT_PATH}/tools/haddock/haddock2.4-2023-08/haddock_configure.sh | |
| """ | |
| # TODO: define project path | |
| PROJECT_PATH = "" | |
| HADDOCK_RUN = f"{PROJECT_PATH}/tools/conda_install/miniconda3/envs/haddock2.4/bin/python2.7" \ | |
| f" {PROJECT_PATH}/tools/haddock/haddock2.4-2023-08/Haddock/RunHaddock.py" | |
| def run_haddock(assembly_output_folder: str, haddock_output_folder: str): | |
| chain_filenames = [i for i in open(os.path.join(assembly_output_folder, "chain.list"), "r").read().split("\n") if i] | |
| if len(chain_filenames) > 19: | |
| print("ERROR: too many chains") | |
| return | |
| os.makedirs(haddock_output_folder, exist_ok=True) | |
| os.chdir(haddock_output_folder) | |
| # copy chain files | |
| for chain_filename in chain_filenames: | |
| os.system(f"cp {os.path.join(assembly_output_folder, chain_filename)} {haddock_output_folder}") | |
| # create xlinks | |
| original_xlinks = open(os.path.join(assembly_output_folder, "xlink_consts.txt"), "r").read().split("\n") | |
| new_xlinks = "" | |
| for line in original_xlinks: | |
| if not line: | |
| continue | |
| res1, chains1, res2, chains2, min_dist, max_dist, score = line.split(" ") | |
| # new_xlinks += f"{chain1} {res1} CA {chain2} {res2} CA 0.0 30.0\n" | |
| for chain1 in chains1: | |
| for chain2 in chains2: | |
| new_xlinks += f"assign (name ca and segid {chain1} and resi {res1}) " \ | |
| f"(name ca and segid {chain2} and resi {res2}) 20.0 15.0 15.0\n" | |
| open(os.path.join(haddock_output_folder, "xlinks.tbl"), "w").write(new_xlinks) | |
| # create params file | |
| pararm_content = f"HADDOCK_DIR={PROJECT_PATH}/tools/haddock/haddock2.4-2023-08\n" | |
| pararm_content += f"N_COMP={len(chain_filenames)}\n" | |
| for i, chain_filename in enumerate(chain_filenames): | |
| pararm_content += f"PDB_FILE{i+1}={chain_filename}\n" | |
| pararm_content += "PROJECT_DIR=./\n" | |
| pararm_content += "RUN_NUMBER=1\n" | |
| pararm_content += "UNAMBIG_TBL=./xlinks.tbl\n" | |
| open(os.path.join(haddock_output_folder, "run.param"), "w").write(pararm_content) | |
| os.system(HADDOCK_RUN) | |
| # optional = reduce number of structures | |
| os.chdir("run1") | |
| run_cns_content = open("run.cns", "r").read() | |
| run_cns_content = run_cns_content.replace("structures_0=1000", "structures_0=50") | |
| run_cns_content = run_cns_content.replace("structures_1=200", "structures_1=10") | |
| run_cns_content = run_cns_content.replace("anastruc_1=200", "anastruc_1=10") | |
| open("run.cns", "w").write(run_cns_content) | |
| with open("haddock_tmp_run.sh", "w") as f: | |
| f.write("#!/bin/bash\n") | |
| f.write(HADDOCK_RUN) | |
| os.system("sbatch --time=24:00:00 --mem=16G haddock_tmp_run.sh") | |
| os.chdir("../..") | |
| def main(): | |
| for pdb_id in os.listdir(f"{PROJECT_PATH}/afm3/base_xlinks25"): | |
| print("running", pdb_id, "cwd", os.getcwd()) | |
| input("continue?") | |
| if pdb_id in ("7QRU", "7T3B"): | |
| continue | |
| run_haddock(f"{PROJECT_PATH}/afm3/base_xlinks25/{pdb_id}/assembly_output", | |
| f"{PROJECT_PATH}/afm3/haddock/{pdb_id}") | |
| if __name__ == '__main__': | |
| main() | |