from .models import Task
import datetime
import os
+import subprocess
+import json
res_codes = [
# 20 canonical amino acids
('LEU', 'L'), ('ARG', 'R'), ('TRP', 'W'), ('ALA', 'A'),
('VAL', 'V'), ('GLU', 'E'), ('TYR', 'Y'), ('MET', 'M'),
('HSD', 'H'),('HSE', 'H'),('HSP', 'H'),
+ ('HIE', 'H'), ('HID', 'H'),('HIP', 'H'),
+ ('CYX', 'C'),
]
three_to_one = dict(res_codes)
def from_pdb(file):
sequence = []
ssbond = []
+ ssbond_ch = []
+ ires = []
+ chain_start = {}
+ chain_end = {}
+ unres_shift = {}
+ chain=[]
+ ichain=0
+ newchain = True
+
for line in file:
+ if line[0:6] == 'COMPND' and line[11:17] == 'CHAIN:':
+ tmp=line[18:]
+ chain_=tmp.split(', ')
+ chain_[-1]=chain_[-1][0]
+ chain.extend(chain_)
+
if line[0:6] == 'ATOM ' and line[13:15] == 'CA':
aa = three_to_one.get(line[17:20])
- sequence.append(aa)
+ i = int(line[22:26])
+ if newchain or i!=ires[-1]:
+ sequence.append(aa)
+ ires.append(i)
+ if newchain:
+ chain_start[chain[ichain]]=i
+ newchain = False
if line[0:3] == 'TER':
sequence.append('XX')
+ chain_end[chain[ichain]]=i
+ ichain=ichain+1
+ newchain = True
if line[0:6] == 'SSBOND':
b=[]
b.append(int(line[17:21]))
b.append(int(line[31:35]))
ssbond.append(b)
-
+ c = []
+ c.append((line[15:16]))
+ c.append((line[29:30]))
+ ssbond_ch.append(c)
if line[0:3] == 'END':
break
- if sequence[-1] == 'XX':
+ while sequence[-1] == 'XX':
del sequence[-1]
if sequence[0] != 'G':
sequence.insert(0,'X')
if sequence[-1] != 'G':
sequence.append('X')
seq=''.join(sequence)
- return seq,ssbond
+# if ires[0] != 1:
+# ssbond=[ [e[0]-ires[0]+1,e[1]-ires[0]+1] for e in ssbond]
+ i=0
+ for c in chain:
+ unres_shift[c]=i+chain_start[c]
+ i=i-(chain_end[c]-chain_start[c])-3
+ ssbond=[ [e[0]-unres_shift[c[0]]+1,e[1]-unres_shift[c[1]]+1] for e,c in zip(ssbond,ssbond_ch)]
+
+ return seq,json.dumps(ssbond)
@login_required
def index(request):
user = request.user
tasks = Task.objects.filter(owner=user)
+ variable = ''
return render(request, "index.html", {
'tasks': tasks
})
task.min_pdbout=form.cleaned_data["min_pdbout"]
task.myfile1=form.cleaned_data["file1"]
task.min_unres_pdb=form.cleaned_data["min_unres_pdb"]
+ task.unres_ff=form.cleaned_data["unres_ff"]
seq,task.ssbond=from_pdb(task.myfile1)
task.md_seq=""
task.md_tau=form.cleaned_data["md_tau"]
task.md_scal_fric=form.cleaned_data["md_scal_fric"]
task.md_mdpdb=form.cleaned_data["md_mdpdb"]
-
+ task.unres_ff=form.cleaned_data["unres_ff"]
task.ready=True
basename = str(task.owner)
task.md_start=form.cleaned_data["md_start"]
task.myfile1=form.cleaned_data["file1"]
task.md_pdbref=form.cleaned_data["md_pdbref"]
+ task.md_ntwx=task.remd_nstex
task.md_seq=""
if task.md_start == "pdbstart" or task.md_pdbref:
task.md_scal_fric=form.cleaned_data["md_scal_fric"]
task.remd_nrep=form.cleaned_data["remd_nrep"]
task.remd_nstex=form.cleaned_data["remd_nstex"]
+ task.md_ntwx=form.cleaned_data["md_ntwx"]
+ task.md_ntwe=form.cleaned_data["md_ntwe"]
# task.remd_traj1file=form.cleaned_data["remd_traj1file"]
# task.remd_rest1file=form.cleaned_data["remd_rest1file"]
task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
+ task.unres_ff=form.cleaned_data["unres_ff"]
basename = str(task.owner)
suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
task.results_text=text
- if task.md_pdbref:
+
+ if task.md_pdbref and task.type=='remd':
for i in range(1,6):
with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
elif i==5:
task.remd_model5=' '.join(line.split()[-6:])
+ for i in range(1,6):
+ with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
+ text=''
+ for line in f:
+ if 'RMSD of the common residues=' in line:
+ text=' RMSD='+line.split()[5]
+ if 'TM-score =' in line:
+ text=text+' TMscore='+line.split()[2]
+ if 'GDT-TS-score=' in line:
+ text=text+' GDT_TS='+line.split()[1]
+
+ if i==1:
+ task.remd_model1=task.remd_model1+text
+ elif i==2:
+ task.remd_model2=task.remd_model2+text
+ elif i==3:
+ task.remd_model3=task.remd_model3+text
+ elif i==4:
+ task.remd_model4=task.remd_model4+text
+ elif i==5:
+ task.remd_model5=task.remd_model5+text
+
+
+
+ if task.type=='remd':
+ with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
+
+ for line in f:
+ if 'sumprob' in line:
+ i=0
+ for line1 in f:
+ i+=1
+ if i>6:
+ break
+ if i==1:
+ task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
+ elif i==2:
+ task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
+ elif i==3:
+ task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
+ elif i==4:
+ task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
+ elif i==5:
+ task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
+
+
task.save()
elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
last = line.split()[0]
else:
last = 0
- task.running=1+int(last)*100.0/task.md_nstep
+ task.running=int(1+int(last)*100.0/task.md_nstep)
if task.running>100:
task.running=100
task.save()
- return redirect('/')
+
+ proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
+ njob=0
+ nq=0
+ for line in proc.stdout:
+ if 'piasek4' in line:
+ if line.split()[1]=='test_server':
+ njob+=1
+ if line.split()[-2]=='Q':
+ nq+=1
+ variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
+
+ return render(request, "index.html", {
+ 'tasks': tasks ,
+ 'variable' : variable
+ })
+
+# return redirect('/')