Increased Speed by 50%

This commit is contained in:
Navan Chauhan 2020-09-22 13:28:48 +05:30
parent c00e771b4d
commit 5ad24bfceb
8 changed files with 889 additions and 14 deletions

View File

@ -209,6 +209,23 @@ def email(zipArchive):
s.quit()
def CopyContentOfFolder(sauce,destination):
src_files = os.listdir(sauce)
for file_name in src_files:
full_file_name = os.path.join(sauce, file_name)
if os.path.isfile(full_file_name):
copy(full_file_name, destination)
def RemoveAllFilesMatching(directory,pattern):
print(directory+"/*"+pattern)
FileList = glob.glob(directory+"/*"+pattern)
for FilePath in FileList:
try:
print(FilePath)
os.remove(FilePath)
except:
print("Error in removing misc file")
inPDB = records[2]
jobID = records[0]
toaddr = records[1]
@ -218,16 +235,17 @@ date = records[6]
#pdb_file_name = pdbpath.split('/')[-1]
#pdbpath="./6lu7.pdb"
import os
import os,glob
cd = os.getcwd()
f = os.path.join(cd,"static/uploads")
scripts = os.path.join(cd,"scripts")
reportDirectory = os.path.join(f,"reports")
modelDirectory = os.path.join(f,"3DModels")
#t = os.path.join(f,"receptor",target)
#r = os.path.join(f,"ligands",ligand)
#c = os.path.join(f,"configs",config)
import tempfile
from shutil import make_archive, copyfile
from shutil import make_archive, copyfile,copy
import time
with tempfile.TemporaryDirectory() as directory:
@ -247,7 +265,11 @@ with tempfile.TemporaryDirectory() as directory:
os.system('obabel -:"%s" --gen3d -opdbqt -O%s.pdbqt' % (records[3],records[4]))
print("Ligand:",records[4])
print(str(records[4]+".pdbqt"))
os.system("docker run --rm -v ${PWD}:/results -w /results -u $(id -u ${USER}):$(id -g ${USER}) navanchauhan/curie-cli -r %s -l %s -c config.txt -dpi" % (pdbqt,str(records[4]+".pdbqt")))
CopyContentOfFolder(scripts,directory)
os.system("./main.sh -r %s -l %s -c config.txt -dpi" % (pdbqt,str(records[4]+".pdbqt")))
#os.system("docker run --rm -v ${PWD}:/results -w /results -u $(id -u ${USER}):$(id -g ${USER}) navanchauhan/curie-cli -r %s -l %s -c config.txt -dpi" % (pdbqt,str(records[4]+".pdbqt")))
RemoveAllFilesMatching(directory,".py")
RemoveAllFilesMatching(directory,".sh")
z = "Curie_Web_Result_"+str(jobID)
zi = os.path.join(f,z)
make_archive(zi, 'zip', directory)
@ -256,6 +278,7 @@ with tempfile.TemporaryDirectory() as directory:
os.system("collada2gltf -i model.dae -o model.gltf")
copyfile("model.gltf",os.path.join(modelDirectory,(str(jobID)+".gltf")))
arch = os.popen("uname -m").read()
print("Generating 3D Model")
if "x86" in arch:
os.system("docker run -it --rm -v $(pwd):/usr/app leon/usd-from-gltf:latest model.gltf model.usdz")
elif "aarch64" in arch:
@ -264,8 +287,6 @@ with tempfile.TemporaryDirectory() as directory:
copyfile("model.usdz",os.path.join(modelDirectory,(str(jobID)+".usdz")))
except:
print("Could not generate USDZ file")
#copy(("Curie_Web_Result_"+str(jobID)),f)
email(zi)
#print((str(zi) + ".zip"))
mycursor.execute('UPDATE curieweb set done=1 where id="%s"' % (jobID))
mycon.commit()

View File

@ -68,6 +68,23 @@ def get3DModel(protein,ligand):
cmd.save("model.dae")
session.stop()
def CopyContentOfFolder(sauce,destination):
src_files = os.listdir(sauce)
for file_name in src_files:
full_file_name = os.path.join(sauce, file_name)
if os.path.isfile(full_file_name):
copy(full_file_name, destination)
def RemoveAllFilesMatching(directory,pattern):
print(directory+"/*"+pattern)
FileList = glob.glob(directory+"/*"+pattern)
for FilePath in FileList:
try:
print(FilePath)
os.remove(FilePath)
except:
print("Error in removing misc file")
receptor_name = "protein.pdbqt"
ligand_name = "ligand.pdbqt"
description = "Curie Web Task"
@ -87,41 +104,43 @@ date = r[8]
if r[9] is not None:
description = r[9]
import os
import os,glob
cd = os.getcwd()
f = os.path.join(cd,"static/uploads")
reportDirectory = os.path.join(f,"reports")
scripts = os.path.join(cd,"scripts")
modelDirectory = os.path.join(f,"3DModels")
#t = os.path.join(f,"receptor",target)
#r = os.path.join(f,"ligands",ligand)
#c = os.path.join(f,"configs",config)
print(f)
import tempfile
from shutil import make_archive, copyfile
from shutil import make_archive, copyfile,copy
with tempfile.TemporaryDirectory() as directory:
print('The created temporary directory is %s' % directory)
os.chdir(directory)
# copy(t,os.getcwd())
# copy(r,os.getcwd())
# copy(c, os.getcwd())
with open(receptor_name,"wb") as file:
file.write(targetB)
with open(ligand_name,"wb") as file:
file.write(ligandB)
with open("config.txt","wb") as file:
file.write(configB)
os.system("docker run --rm -v ${PWD}:/results -w /results -u $(id -u ${USER}):$(id -g ${USER}) navanchauhan/curie-cli -r %s -l %s -c config.txt -dpi" % (receptor_name,ligand_name))
#copy("report.pdf",f)
# Legacy Docker Curie-Cli Run
#os.system("docker run --rm -v ${PWD}:/results -w /results -u $(id -u ${USER}):$(id -g ${USER}) navanchauhan/curie-cli -r %s -l %s -c config.txt -dpi" % (receptor_name,ligand_name))
CopyContentOfFolder(scripts,directory)
os.system("./main.sh -r %s -l %s -c config.txt -dpi" % (receptor_name,ligand_name))
RemoveAllFilesMatching(directory,".py")
RemoveAllFilesMatching(directory,".sh")
z = "Curie_Web_Result_"+str(jobID)
zi = os.path.join(f,z)
make_archive(zi, 'zip', directory)
#copy(("Curie_Web_Result_"+str(jobID)),f)
copyfile("report.pdf",os.path.join(reportDirectory,(str(jobID)+".pdf")))
get3DModel(receptor_name,ligand_name.replace(".pdbqt","_out.pdbqt"))
os.system("collada2gltf -i model.dae -o model.gltf")
copyfile("model.gltf",os.path.join(modelDirectory,(str(jobID)+".gltf")))
arch = os.popen("uname -m").read()
print("Generating 3D Model")
if "x86" in arch:
os.system("docker run -it --rm -v $(pwd):/usr/app leon/usd-from-gltf:latest model.gltf model.usdz")
elif "aarch64" in arch:
@ -131,6 +150,5 @@ with tempfile.TemporaryDirectory() as directory:
except:
print("Could not generate USDZ file")
email(zi)
#print((str(zi) + ".zip"))
mycursor.execute('UPDATE curieweb set done=1 where id="%s"' % (jobID))
mycon.commit()

View File

@ -0,0 +1,6 @@
print("## Figures", end="\n\n")
print("![Back View](output-back.png){width=100%}", end="\n\n")
print("![Front View](output-front.png){width=100%}", end="\n\n")
print("![Close Up View of the Back](closeup-back.png){width=100%}", end="\n\n")
print("![Close Up View of the Front](closeup-front.png){width=100%}", end="\n\n")

45
app/scripts/get-best.py Normal file
View File

@ -0,0 +1,45 @@
#!/usr/bin/python3
import argparse
import pymol2
import re
#################
# Configuration #
#################
version = "1.0"
desc_text = "PyMol Quick Visualtion " + version
parser = argparse.ArgumentParser(description=desc_text)
parser.add_argument("-p","--protein",help="Path to protein file")
parser.add_argument("-l","--ligand",help="Path to ligand_out file")
args = parser.parse_args()
def li(s):
#log.info(s)
None
if args.protein == None:
print("Error: Please specify protein file")
exit(1)
if args.ligand == None:
print("Error: Please specify ligand file")
exit(1)
print("Getting Best ligand from",args.protein,args.ligand)
protein = args.protein
ligand = args.ligand
session = pymol2.PyMOL()
session.start()
cmd = session.cmd
cmd.load(protein,'pro')
cmd.load(ligand,'lig')
cmd.split_states('lig')
#fname = re.sub(r'^.*?/', '', protein.replace(".pdbqt","")) + "-" + re.sub(r'^.*?/', '', ligand.replace(".pdbqt","")) + ".pdb"
cmd.save("best.pdb","pro lig_0001")

View File

@ -0,0 +1,46 @@
#!/usr/bin/python3
import argparse
parser = argparse.ArgumentParser(description="Get Docking Score")
parser.add_argument("-p","--protein",help="Path to protein file")
parser.add_argument("-l","--ligand",help="Path to ligand_out file")
args = parser.parse_args()
if args.protein == None:
print("Error: Please specify protein file")
exit(1)
if args.ligand == None:
print("Error: Please specify ligand file")
exit(1)
protein = args.protein
ligand = args.ligand
from os.path import basename
print("# " + str(basename(protein)).replace(".pdbqt","") + "-" + str(basename(ligand)).replace("_out.pdbqt",""), end="\n\n")
from tabulate import tabulate
file = open(ligand, "r")
lines = file.readlines()
results = []
i = 1
for line in lines:
ta = []
if line.find('REMARK VINA') == 0 and line.split()[3] != "":
l = line.split()
ta.append(i)
ta.append(l[3])
ta.append(l[4])
ta.append(l[5])
i += 1
if ta != []:
results.append(ta)
print("## Docking Scores",end="\n\n")
print(tabulate(results,headers=["No.","Affinity","rmsd l.b","rmsd u.b"]))
print("",end="\n\n")

160
app/scripts/main.sh Executable file
View File

@ -0,0 +1,160 @@
#!/bin/bash
echo "$(pwd)"
currentVersion="0.9"
protein="false"
ligand="false"
docking="false"
visualisations="false"
interactions="false"
proteinPath=""
ligandPath=""
pdfPath=""
smile=""
name="report"
config=""
usage()
{
cat <<EOF
Curie-CLI
Description: OwO.
Usage: curie [flags] or curie [-a] [arg] [-s] [arg]
-d Perform Docking using AutoDock Vina
-p Visualisations using PyMOL
-i Protein-Ligand Interactions using PLIP
-s SMILES Code for Ligand
-n Name for ligand if using the -s option
-r Specify Receptor file path (PDBQT Format Only!)
-l Specify Ligand file path (PDBQT Format Only!)
-c Specify AutoDock Vina Configuration File (TXT Format Only!)
-h Show the help
-v Get the tool version
Examples:
./main.sh -v
./main.sh -v
EOF
}
while getopts "r:l:s:n:c:vhdip" opt; do
case "$opt" in
\?) echo "Invalid option: -$OPTARG" >&2
exit 1
;;
h) usage
exit 0
;;
v) echo "Version $currentVersion"
exit 0
;;
u)
getConfiguredClient || exit 1
checkInternet || exit 1
update
exit 0
;;
d)
docking="true"
;;
i)
interactions="true"
;;
p)
visualisations="true"
;;
s)
smile="$OPTARG"
;;
n)
name="$OPTARG"
;;
r)
proteinPath="$OPTARG"
;;
l)
ligandPath="$OPTARG"
;;
c)
config="$OPTARG"
;;
a)
artist="true"
if [[ "$(echo "$@" | grep -Eo "\-s")" == "-s" ]];then song="true";fi # wont go through both options if arg spaced and not quoted this solves that issue (dont need this but once had bug on system where it was necessary)
if [[ "$(echo "$@" | grep -Eo "\-f")" == "-f" ]];then filePath=$(echo "$@" | grep -Eo "\-f [ a-z A-Z / 0-9 . \ ]*[ -]?" | sed s/-f//g | sed s/-//g | sed s/^" "//g);fi
;;
#s)
# song="true"
# if [[ "$(echo "$@" | grep -Eo "\-a")" == "-a" ]];then artist="true";fi # wont go through both options if arg spaced and not quoted this solves that issue (dont need this but once had bug on system where it was necessary)
# if [[ "$(echo "$@" | grep -Eo "\-f")" == "-f" ]];then filePath=$(echo "$@" | grep -Eo "\-f [ a-z A-Z / 0-9 . \ ]*[ -]?" | sed s/-f//g | sed s/-//g | sed s/^" "//g);fi
# ;;
:) echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
if [[ $# == "0" ]]; then
usage ## if calling the tool with no flags and args chances are you want to return usage
exit 0
elif [[ $# == "1" ]]; then
if [[ $1 == "update" ]]; then
getConfiguredClient || exit 1
checkInternet || exit 1
update || exit 1
exit 0
elif [[ $1 == "help" ]]; then
usage
exit 0
fi
fi
if [[ $docking == "true" ]]; then
if [[ $proteinPath != "" ]]; then
if [[ $smile != "" ]] || [[ $ligandPath != "" ]]; then
if [[ $config == "" ]]; then
echo "Configuration File Not Specified!"
exit 1
else
dockingCheck="true"
fi
else
echo "WTF Only Protein!"
exit 1
fi
fi
fi
if [[ $smile != "" ]]; then
if [[ $name == "" ]]; then
name="ligand"
obabel -:"$smile" --gen3d -opdbqt -O$name.pdbqt
ligandPath="$name.pdbqt"
fi
fi
if [[ $dockingCheck == "true" ]]; then
echo ""
vina --receptor $proteinPath --ligand $ligandPath --config $config
fi
if [[ $interactions == "true" ]]; then
file=$(echo "$ligandPath" | cut -f 1 -d '.')
python3 ./get-best.py -p $proteinPath -l "$(echo $file)_out.pdbqt"
echo "Running PLIP"
plip -f best.pdb -qpxy
echo "Getting Dock Score"
python3 ./get_dock_score.py -l "$(echo $file)_out.pdbqt" -p $proteinPath > report.md
echo "Making partial report"
python3 ./makeReport.py --input . >> report.md
if [[ $visualisations == "true" ]]; then
echo "Creating Visualisations"
python3 ./quick-ligand-protein.py -p $proteinPath -l "$(echo $file)_out.pdbqt"
python3 ./add-pictures.py >> report.md
fi
echo "Generating PDF"
pandoc -V geometry:margin=1in report.md --pdf-engine=xelatex -o $name.pdf
fi
#echo "$proteinPath and $ligandPath and $docking and $interactions and $visualisations"

458
app/scripts/makeReport.py Normal file
View File

@ -0,0 +1,458 @@
#!/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")

View File

@ -0,0 +1,121 @@
#!/usr/bin/python3
import argparse
# import logzero
# import logging
# from logzero import logger as log
import pymol2
import time
import os
print(os.getcwd())
#################
# Configuration #
#################
startTime = time.time()
version = "1.0"
desc_text = "PyMol Quick Visualtion " + version
ligandColor = "red"
# logzero.loglevel(logging.INFO)
height = 1000
width = 800
dpi = 300
ray = 0
m1 = "target"
m2 = "ligand"
parser = argparse.ArgumentParser(description=desc_text)
parser.add_argument("-p", "--protein", help="Path to protein file")
parser.add_argument("-l", "--ligand", help="Path to ligand_out file")
parser.add_argument("-c", "--color", help="Color for ligand in visualisation")
args = parser.parse_args()
if args.protein == None:
print("Error: Please specify protein file")
exit(1)
if args.ligand == None:
print("Error: Please specify ligand file")
exit(1)
if args.color == None:
print("No color was speciifed, using default settings.")
protein = args.protein
print("Protein: ", protein)
ligand = args.ligand
def loadMol(filename, name):
print("Loading " + filename + " as " + name)
cmd.load(filename, name)
def changeColor(name, colorName):
print("Changed " + name + "'s color to " + colorName)
cmd.color(colorName, name)
def orientEtZoom():
cmd.orient()
cmd.zoom()
def showSurface(name):
cmd.show("surface", name)
def surfaceTransparency(amount):
print("Changed surface transparency to " + str(amount * 100) + "%")
cmd.set("transparency", amount)
def generatePNG(filename, height=height, width=width, dpi=dpi, ray=ray):
print("Generating " + filename + ".png")
cmd.png(filename, height, width, dpi=dpi, ray=ray)
def flipHorizontal():
cmd.rotate("y", 180)
def zoomTo(name):
cmd.zoom(name)
def generatePictures():
generatePNG("output-front")
flipHorizontal()
generatePNG("output-back")
zoomTo(m2)
generatePNG("closeup-back")
orientEtZoom()
flipHorizontal()
zoomTo(m2)
generatePNG("closeup-front")
print("Initialising PyMol")
session = pymol2.PyMOL()
print("Starting PyMol Session")
session.start()
cmd = session.cmd
loadMol(protein, m1)
cmd.remove("resn hoh") # remove water
loadMol(ligand, m2)
changeColor(m1, "grey60")
changeColor(m2, ligandColor)
cmd.color("blue", "hetatm") # color heteroatoms
orientEtZoom()
showSurface(m1)
surfaceTransparency(0.6)
generatePictures()
endTime = time.time()
print("Finished Execution in " + str(round((endTime - startTime), 2)) + " seconds.")