wuxing0105's picture
Upload folder using huggingface_hub
8efb4bd verified
Raw
History Blame Contribute Delete
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()