aboutsummaryrefslogtreecommitdiff
path: root/app/dock-manual.py
blob: 0734b14a9cdfbb331ca07e60cd56389dbafa8bb0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import mysql.connector as con
from misc.common import get3DModel, CopyContentOfFolder, RemoveAllFilesMatching
from misc.email import email
import os
import configparser
import sys

iniConfig = configparser.ConfigParser()
iniConfig.read('config.ini')

try:
    iniConfig['DATABASE']
except KeyError:
    iniConfig.read("../config.ini")

mycon = con.connect(host=iniConfig['DATABASE']['HOST'],user=iniConfig['DATABASE']['USER'],password=iniConfig['DATABASE']['PASSWORD'],port=iniConfig['DATABASE']['PORT'],database=iniConfig['DATABASE']['NAME'])
mycursor = mycon.cursor()

sql_select_Query = "select * from curieweb where done=0 LIMIT 1"
mycursor.execute(sql_select_Query)

records = mycursor.fetchall()
if records == []:
    print("Empty Set 😳")
    print("No active task, exitting gracefully")
    exit(0)

receptor_name = "protein.pdbqt"
ligand_name = "ligand.pdbqt"
description = "Curie Web Task"

#print(records[0])
r = records[0]
jobID = r[0]
toEmail = r[1]
toaddr = toEmail
targetB = r[2]
if r[3] is not None:
    receptor_name = str(r[3])
if r[6] is not None:
    ligand_name = str(r[6])
ligandB = r[4]
configB = r[7]
date = r[8]
if r[9] is not None:
    description = r[9]
else:
    description = "not specified"

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")

import tempfile
from shutil import make_archive, copyfile,copy

with tempfile.TemporaryDirectory() as directory:
    print('The created temporary directory is %s' % directory)
    os.chdir(directory)
    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)
    # 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)
    try:
        copyfile("report.pdf",os.path.join(reportDirectory,(str(jobID)+".pdf")))
    except:
        reason = "Could not generate the report, this could be because of a failed docking job. Please check the ZIP archive for the configuration and converted PDBQTs and try submitting manually. "
        email(toaddr,jobID,date,description,zipArchive=zi,reason=reason)
        mycursor.execute('UPDATE curieweb set done=1 where id="%s"' % (jobID))
        mycon.commit()
        sys.exit(0)	
    res = get3DModel(receptor_name,ligand_name.replace(".pdbqt","_out.pdbqt"))
    if res == None:
        reason = "Could not generate the report, this could be because of a failed docking job. Please check the ZIP archive for the configuration and converted PDBQTs and try submitting manually. "
        email(toaddr,jobID,date,description,zipArchive=zi,reason=reason)
        mycursor.execute('UPDATE curieweb set done=1 where id="%s"' % (jobID))
        mycon.commit()
        sys.exit(0)	 
    os.system("collada2gltf -i model.dae -o model.gltf")
    try:
        copyfile("model.gltf",os.path.join(modelDirectory,(str(jobID)+".gltf")))
    except:
        print("Does not have Collada2GLTF Installed")
        email(toaddr,jobID,date,description,zipArchive=zi)
        mycursor.execute('UPDATE curieweb set done=1 where id="%s"' % (jobID))
        mycon.commit()
        exit(0)
    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:
        os.system("docker run -it --rm -v $(pwd):/usr/app navanchauhan/usd-from-gltf:latest model.gltf model.usdz")
    try:
        copyfile("model.usdz",os.path.join(modelDirectory,(str(jobID)+".usdz")))
    except:
        print("Could not generate USDZ file")
    email(toaddr,jobID,date,description,zipArchive=zi)
    mycursor.execute('UPDATE curieweb set done=1 where id="%s"' % (jobID))
    mycon.commit()