Curie-Web/app/scripts/makeReport.py

459 lines
15 KiB
Python

#!/usr/bin/python3
import argparse
parser = argparse.ArgumentParser(description="Make Report Helper Script")
parser.add_argument("-i", "--input", help="Path to report folder")
args = parser.parse_args()
if args.input == None:
print("Error: Please specify path")
exit(1)
path = args.input
# path = '/Users/navanchauhan/Desktop/nCOV-19/scripts/pymol/test/'
import untangle
from tabulate import tabulate
# import sys
# report = path + "report.md"
# sys.stdout = open(report, 'w')
from os import listdir
from os.path import isfile, join
onlyfiles = [f for f in listdir(path) if isfile(join(path, f))]
image = ""
for x in onlyfiles:
if ".png" in x and "UNL" in x:
image = x
import os
fname = os.path.join(path, "report.xml")
doc = untangle.parse(fname)
hi, hb, wb, sb, ps, pc, hab, mc = 0, 0, 0, 0, 0, 0, 0, 0
indexForUNL = 0
for x in doc.report.bindingsite:
if x.identifiers.longname.cdata == "UNL":
break
else:
indexForUNL += 1
name = doc.report.pdbid.cdata
# print(("# " + (name.replace("_"," ")).replace("PROTEIN","")), end="\n\n")
fallback = 0
print("# Visualisation", end="\n\n")
print(f"![]({image})", end="\n\n")
natural_ligands = []
showNaturalLigands = True
try:
for x in range(len(doc.report.bindingsite)):
if doc.report.bindingsite[x]["has_interactions"] == "True" and x != indexForUNL:
natural_ligands.append(x)
except:
fallback == 1
if natural_ligands == []:
showNaturalLigands == False
for ligand in natural_ligands:
print("### Natural Ligand " + str(ligand+1), end="\n\n")
if doc.report.bindingsite[ligand].interactions.hydrophobic_interactions.cdata == "":
print("No Hydrophobic Interactions Found", end="\n\n")
else:
print("#### Hydrophobic Interactions", end="\n\n")
tableBody = []
tableHeaders = ["No.", "Res.", "AA", "Dist", "Ligand Atom", "Proton Atom"]
i = 1
for x in doc.report.bindingsite[
ligand
].interactions.hydrophobic_interactions.hydrophobic_interaction:
l = [
i,
x.resnr.cdata,
x.restype.cdata,
x.dist.cdata,
x.ligcarbonidx.cdata,
x.protcarbonidx.cdata,
]
i += 1
tableBody.append(l)
print(tabulate(tableBody, headers=tableHeaders), end="\n\n")
if doc.report.bindingsite[ligand].interactions.hydrogen_bonds.cdata == "":
print("No Hydrogen Bonds Found", end="\n\n")
else:
print("## Hydrogen Bonds", end="\n\n")
tableBody = []
tableHeaders = [
"No.",
"Res.",
"AA",
"Dist H-A",
"Dist D-A",
"Don Angle",
"Protisdon?",
"Sidechain?",
"D. Atom",
"A. Atom",
]
i = 1
for x in doc.report.bindingsite[
ligand
].interactions.hydrogen_bonds.hydrogen_bond:
l = [
i,
x.resnr.cdata,
x.restype.cdata,
x.dist_h_a.cdata,
x.dist_d_a.cdata,
x.don_angle.cdata,
x.protisdon.cdata,
x.sidechain.cdata,
]
l.append((x.donoridx.cdata + "[" + x.donortype.cdata + "]"))
l.append((x.acceptoridx.cdata + "[" + x.acceptortype.cdata + "]"))
i += 1
tableBody.append(l)
# print(i, x.resnr.cdata, x.restype.cdata, x.dist_h_a.cdata, x.dist_d_a.cdata, x.don_angle.cdata, x.protisdon.cdata, x.sidechain.cdata, (x.donoridx.cdata + "[" + x.donortype.cdata + "]"), (x.acceptoridx.cdata + "[" + x.acceptortype.cdata + "]"))
print(tabulate(tableBody, headers=tableHeaders), end="\n\n")
print("## Docked Ligand Interactions", end="\n\n")
try:
if (
doc.report.bindingsite[indexForUNL].interactions.hydrophobic_interactions.cdata
== ""
):
print("No Hydrophobic Interactions Found", end="\n\n")
else:
print("**Hydrophobic Interactions Found**", end="\n\n")
hi = 1
except AttributeError:
fallback = 1
if fallback == 0:
if (
doc.report.bindingsite[indexForUNL].interactions.hydrophobic_interactions.cdata
== ""
):
print("No Hydrophobic Interactions Found", end="\n\n")
else:
print("**Hydrophobic Interactions Found**", end="\n\n")
hi = 1
if doc.report.bindingsite[indexForUNL].interactions.hydrogen_bonds.cdata == "":
print("No Hydrogen Bonds Found", end="\n\n")
else:
print("**Hydrogen Bonds Found**", end="\n\n")
hb = 1
if doc.report.bindingsite[indexForUNL].interactions.water_bridges.cdata == "":
print("No Water Bridges Found", end="\n\n")
else:
print("**Water Bridges Found**", end="\n\n")
wb = 1
if doc.report.bindingsite[indexForUNL].interactions.salt_bridges.cdata == "":
print("No Salt Bridges Found", end="\n\n")
else:
print("**Salt Bridges Found**", end="\n\n")
sb = 1
if doc.report.bindingsite[indexForUNL].interactions.pi_stacks.cdata == "":
print("No Pi Stacks Found", end="\n\n")
else:
print("**Pi Stacks Found**", end="\n\n")
ps = 1
if (
doc.report.bindingsite[indexForUNL].interactions.pi_cation_interactions.cdata
== ""
):
print("No Pi Cation Interactions Found", end="\n\n")
else:
print("**Pi Cation Interactions Found**", end="\n\n")
pc = 1
if doc.report.bindingsite[indexForUNL].interactions.halogen_bonds.cdata == "":
print("No Halogen Bonds Found", end="\n\n")
else:
print("** Halogen Bonds Found**", end="\n\n")
hab = 1
if doc.report.bindingsite[indexForUNL].interactions.metal_complexes.cdata == "":
print("No Metal Complexes Found", end="\n\n")
else:
print("**Metal Complexes Found**", end="\n\n")
mc = 1
if fallback == 1:
if doc.report.bindingsite.interactions.hydrophobic_interactions.cdata == "":
print("No Hydrophobic Interactions Found", end="\n\n")
else:
print("**Hydrophobic Interactions Found**", end="\n\n")
hi = 1
if doc.report.bindingsite.interactions.hydrogen_bonds.cdata == "":
print("No Hydrogen Bonds Found", end="\n\n")
else:
print("**Hydrogen Bonds Found**", end="\n\n")
hb = 1
if doc.report.bindingsite.interactions.water_bridges.cdata == "":
print("No Water Bridges Found", end="\n\n")
else:
print("**Water Bridges Found**", end="\n\n")
wb = 1
if doc.report.bindingsite.interactions.salt_bridges.cdata == "":
print("No Salt Bridges Found", end="\n\n")
else:
print("**Salt Bridges Found**", end="\n\n")
sb = 1
if doc.report.bindingsite.interactions.pi_stacks.cdata == "":
print("No Pi Stacks Found", end="\n\n")
else:
print("**Pi Stacks Found**", end="\n\n")
ps = 1
if doc.report.bindingsite.interactions.pi_cation_interactions.cdata == "":
print("No Pi Cation Interactions Found", end="\n\n")
else:
print("**Pi Cation Interactions Found**", end="\n\n")
pc = 1
if doc.report.bindingsite.interactions.halogen_bonds.cdata == "":
print("No Halogen Bonds Found", end="\n\n")
else:
print("** Halogen Bonds Found**", end="\n\n")
hab = 1
if doc.report.bindingsite.interactions.metal_complexes.cdata == "":
print("No Metal Complexes Found", end="\n\n")
else:
print("**Metal Complexes Found**", end="\n\n")
mc = 1
if fallback == 0:
if hi == 1:
print("## Hydrophobic Interactions", end="\n\n")
tableBody = []
tableHeaders = ["No.", "Res.", "AA", "Dist", "Ligand Atom", "Proton Atom"]
i = 1
for x in doc.report.bindingsite[
indexForUNL
].interactions.hydrophobic_interactions.hydrophobic_interaction:
l = [
i,
x.resnr.cdata,
x.restype.cdata,
x.dist.cdata,
x.ligcarbonidx.cdata,
x.protcarbonidx.cdata,
]
i += 1
tableBody.append(l)
print(tabulate(tableBody, headers=tableHeaders), end="\n\n")
if hb == 1:
print("## Hydrogen Bonds", end="\n\n")
tableBody = []
tableHeaders = [
"No.",
"Res.",
"AA",
"Dist H-A",
"Dist D-A",
"Don Angle",
"Protisdon?",
"Sidechain?",
"D. Atom",
"A. Atom",
]
i = 1
for x in doc.report.bindingsite[
indexForUNL
].interactions.hydrogen_bonds.hydrogen_bond:
l = [
i,
x.resnr.cdata,
x.restype.cdata,
x.dist_h_a.cdata,
x.dist_d_a.cdata,
x.don_angle.cdata,
x.protisdon.cdata,
x.sidechain.cdata,
]
l.append((x.donoridx.cdata + "[" + x.donortype.cdata + "]"))
l.append((x.acceptoridx.cdata + "[" + x.acceptortype.cdata + "]"))
i += 1
tableBody.append(l)
# print(i, x.resnr.cdata, x.restype.cdata, x.dist_h_a.cdata, x.dist_d_a.cdata, x.don_angle.cdata, x.protisdon.cdata, x.sidechain.cdata, (x.donoridx.cdata + "[" + x.donortype.cdata + "]"), (x.acceptoridx.cdata + "[" + x.acceptortype.cdata + "]"))
print(tabulate(tableBody, headers=tableHeaders), end="\n\n")
if sb == 1:
print("## Salt Bridges", end="\n\n")
tableBody = []
tableHeaders = [
"Index",
"Residue",
"AA",
"Distance",
"Protein positive?",
"Ligand Group",
"Ligand Atoms",
]
i = 1
for x in doc.report.bindingsite[
indexForUNL
].interactions.salt_bridges.salt_bridge:
l = [
i,
x.resnr.cdata,
x.restype.cdata,
x.dist.cdata,
x.protispos.cdata,
x.lig_group.cdata,
]
atoms = []
for y in x.lig_idx_list.idx:
atoms.append(y.cdata)
l.append(atoms)
i += 1
tableBody.append(l)
print(tabulate(tableBody, headers=tableHeaders), end="\n\n")
if pc == 1:
print("## Pi Cation Interactions", end="\n\n")
tableBody = []
tableHeaders = ["Index", "Residue", "AA", "Distance", "Prot charged?", "Atoms"]
i = 1
for x in doc.report.bindingsite[
indexForUNL
].interactions.pi_cation_interactions.pi_cation_interaction:
l = [
i,
x.resnr.cdata,
x.restype.cdata,
x.dist.cdata,
x.offset.cdata,
x.protcharged.cdata,
]
atoms = []
for y in x.lig_idx_list.idx:
atoms.append(y.cdata)
l.append(atoms)
i += 1
tableBody.append(l)
print(tabulate(tableBody, headers=tableHeaders), end="\n\n")
elif fallback == 1:
if hi == 1:
print("## Hydrophobic Interactions", end="\n\n")
tableBody = []
tableHeaders = ["No.", "Res.", "AA", "Dist", "Ligand Atom", "Proton Atom"]
i = 1
for (
x
) in (
doc.report.bindingsite.interactions.hydrophobic_interactions.hydrophobic_interaction
):
l = [
i,
x.resnr.cdata,
x.restype.cdata,
x.dist.cdata,
x.ligcarbonidx.cdata,
x.protcarbonidx.cdata,
]
i += 1
tableBody.append(l)
print(tabulate(tableBody, headers=tableHeaders), end="\n\n")
if hb == 1:
print("## Hydrogen Bonds", end="\n\n")
tableBody = []
tableHeaders = [
"No.",
"Res.",
"AA",
"Dist H-A",
"Dist D-A",
"Don Angle",
"Protisdon?",
"Sidechain?",
"D. Atom",
"A. Atom",
]
i = 1
for x in doc.report.bindingsite.interactions.hydrogen_bonds.hydrogen_bond:
l = [
i,
x.resnr.cdata,
x.restype.cdata,
x.dist_h_a.cdata,
x.dist_d_a.cdata,
x.don_angle.cdata,
x.protisdon.cdata,
x.sidechain.cdata,
]
l.append((x.donoridx.cdata + "[" + x.donortype.cdata + "]"))
l.append((x.acceptoridx.cdata + "[" + x.acceptortype.cdata + "]"))
i += 1
tableBody.append(l)
# print(i, x.resnr.cdata, x.restype.cdata, x.dist_h_a.cdata, x.dist_d_a.cdata, x.don_angle.cdata, x.protisdon.cdata, x.sidechain.cdata, (x.donoridx.cdata + "[" + x.donortype.cdata + "]"), (x.acceptoridx.cdata + "[" + x.acceptortype.cdata + "]"))
print(tabulate(tableBody, headers=tableHeaders), end="\n\n")
if sb == 1:
print("## Salt Bridges", end="\n\n")
tableBody = []
tableHeaders = [
"Index",
"Residue",
"AA",
"Distance",
"Protein positive?",
"Ligand Group",
"Ligand Atoms",
]
i = 1
for x in doc.report.bindingsite.interactions.salt_bridges.salt_bridge:
l = [
i,
x.resnr.cdata,
x.restype.cdata,
x.dist.cdata,
x.protispos.cdata,
x.lig_group.cdata,
]
atoms = []
for y in x.lig_idx_list.idx:
atoms.append(y.cdata)
l.append(atoms)
i += 1
tableBody.append(l)
print(tabulate(tableBody, headers=tableHeaders), end="\n\n")
if pc == 1:
print("## Pi Cation Interactions", end="\n\n")
tableBody = []
tableHeaders = ["Index", "Residue", "AA", "Distance", "Prot charged?", "Atoms"]
i = 1
for (
x
) in (
doc.report.bindingsite.interactions.pi_cation_interactions.pi_cation_interaction
):
l = [
i,
x.resnr.cdata,
x.restype.cdata,
x.dist.cdata,
x.offset.cdata,
x.protcharged.cdata,
]
atoms = []
for y in x.lig_idx_list.idx:
atoms.append(y.cdata)
l.append(atoms)
i += 1
tableBody.append(l)
print(tabulate(tableBody, headers=tableHeaders), end="\n\n")