Skip to content
Snippets Groups Projects
evaluate_results.py 2.11 KiB
Newer Older
from eval.docking import docking
from eval.prepare import prepare
from eval.window import compute_box
import os
import csv
from eval.get_mutations import get_num_mutations


def get_energy(receptor_path, ligand_path):
  #receptor_name = "0_whole"
  #ligand_name = "0"

  # compute the sizes of the docking "box" / window
  docking_box = compute_box(receptor_path, ligand_path, padding=10)
  #print(docking_box["center"])

  # prepare source files to PDBQT files
  receptor_path_preped = prepare(receptor_path)
  ligand_path_preped = prepare(ligand_path)
  try:
    dic = docking(receptor_path_preped,
                     ligand_path_preped,
                     center=docking_box["center"],
                     box_size=docking_box["size"],
                     n_dockings=40,
                     n_poses=20)
    energy, dG =  dic["Kd"], dic["dG"]
  except Exception as e:
    print(f"[!]Error: {e}.")
    print("------")
    return -1


output_path = "./summary.tsv"
res_path = "./results/mutants/"
DATA = [["ID","SCORE" ,"KD", "NUM_MUTATIONS"]]

for mol in os.listdir(res_path):
  if mol.endswith(".sdf"):
    print("-------------------------")
    # We have a molecule that ends with sdf, which means that his receptors are also here
    prefix = mol[0:-4]
    for rec in os.listdir(res_path):
      if rec.startswith(prefix) and rec.endswith(".pdb"):
        # We have a receptor that starts with the prefix of the molecule
        print("Doing:", rec, "with ligand:", mol)
        energy,dG = get_energy(os.path.join(res_path, rec),
                            os.path.join(res_path, mol))
        
        numbers = "".join([s for s in rec.split() if s.isdigit()])
        print("Numbers:", numbers)
        num_mutations = get_num_mutations(
            os.path.join(res_path, rec),
            os.path.join(res_path, numbers + "_whole.pdb"))
        DATA.append([rec, dG,energy, num_mutations])
        if int(numbers) >= 3:
          break

# Write the list of lists into the TSV file
with open(output_path, 'w', newline='') as file:
  writer = csv.writer(file, delimiter='\t')
  writer.writerows(DATA)