X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=django_simple%2Ftodo%2Fviews.py;h=f545f1e286f0bd164532a56e926277c2d25ee096;hb=53f1728daa2b4d8d67349c048822ccd04e819d48;hp=521517a72ad81d8af2fa99914762a8ad1009b929;hpb=591ac48194b207c02ffd7cda59c1c9709a114498;p=django_unres.git diff --git a/django_simple/todo/views.py b/django_simple/todo/views.py index 521517a..f545f1e 100644 --- a/django_simple/todo/views.py +++ b/django_simple/todo/views.py @@ -5,6 +5,8 @@ from .forms import * from .models import Task import datetime import os +import subprocess +import json res_codes = [ # 20 canonical amino acids @@ -14,6 +16,8 @@ res_codes = [ ('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) @@ -31,21 +35,50 @@ def seq_add_x(sequence): 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: + if len(chain)>0: + chain_start[chain[ichain]]=i + newchain = False if line[0:3] == 'TER': sequence.append('XX') + if len(chain)>0: + 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') @@ -53,13 +86,22 @@ def from_pdb(file): 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) + tasks = Task.objects.filter(owner=user).order_by('-created_date') + variable = '' return render(request, "index.html", { 'tasks': tasks }) @@ -121,6 +163,7 @@ def add_min_a(request,task_id): 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="" @@ -218,7 +261,7 @@ def add_md_a(request,task_id): 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) @@ -245,6 +288,7 @@ def add_remd(request,task_id): 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: @@ -308,10 +352,13 @@ def add_remd_a(request,task_id): 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") @@ -361,7 +408,7 @@ def delete(request, task_id): @login_required def refresh_done(request): user = request.user - tasks = Task.objects.filter(owner=user) + tasks = Task.objects.filter(owner=user).order_by('-created_date') for task in tasks: if os.path.isfile(task.jobdirname+'/finished') and not task.done: task.done=True @@ -400,24 +447,106 @@ def refresh_done(request): if 'Total wall' in line: text=text+line - task.results_text=text + if task.md_pdbref and task.type=='remd': + + for i in range(1,6): + try: + with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f: + line=f.readline() + if i==1: + task.remd_model1=' '.join(line.split()[-6:]) + elif i==2: + task.remd_model2=' '.join(line.split()[-6:]) + elif i==3: + task.remd_model3=' '.join(line.split()[-6:]) + elif i==4: + task.remd_model4=' '.join(line.split()[-6:]) + elif i==5: + task.remd_model5=' '.join(line.split()[-6:]) + except EnvironmentError: + print 'file_wham_T*pdb open error' + 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: if (task.type=='min'): task.running =1 else: with open(task.jobdirname+'/file_GB000.stat', 'r') as f: + line='' for line in f: pass - if line: + if line != '': 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('/')