autorefresh index and details (login user)
[django_unres.git] / django_simple / todo / views.py
1 from django.contrib.auth.decorators import login_required
2 from django.shortcuts import redirect, render, get_object_or_404
3 from django.contrib.auth.models import User
4 from .forms import *
5 from .models import Task
6 import datetime
7 import os
8 import subprocess
9 import json
10 from lazysignup.decorators import allow_lazy_user
11 from lazysignup.utils import is_lazy_user
12
13 res_codes = [
14                 # 20 canonical amino acids
15                 ('CYS', 'C'), ('ASP', 'D'), ('SER', 'S'), ('GLN', 'Q'),
16                 ('LYS', 'K'), ('ILE', 'I'), ('PRO', 'P'), ('THR', 'T'),
17                 ('PHE', 'F'), ('ASN', 'N'), ('GLY', 'G'), ('HIS', 'H'),
18                 ('LEU', 'L'), ('ARG', 'R'), ('TRP', 'W'), ('ALA', 'A'),
19                 ('VAL', 'V'), ('GLU', 'E'), ('TYR', 'Y'), ('MET', 'M'),
20                 ('HSD', 'H'),('HSE', 'H'),('HSP', 'H'),
21                 ('HIE', 'H'), ('HID', 'H'),('HIP', 'H'),
22                 ('CYX', 'C'),
23                 ('DCY', 'c'), ('DAS', 'd'), ('DSN', 's'), ('DGN', 'q'),
24                 ('DLY', 'k'), ('DIL', 'i'), ('DPR', 'p'), ('DTH', 't'),
25                 ('DPN', 'f'), ('DSG', 'n'), ('DHI', 'h'),
26                 ('DLE', 'l'), ('DAR', 'r'), ('DTR', 'w'), ('DAL', 'a'),
27                 ('DVA', 'v'), ('DGL', 'e'), ('DTY', 'y'), ('MED', 'm'),                
28                ]
29
30 three_to_one = dict(res_codes)
31
32 def seq_add_x(sequence):
33     if sequence[0] != 'G' and sequence[0] != 'g':
34         sequence='X'+sequence
35     if sequence[-1] != 'G' and sequence[-1] != 'g':
36         sequence=sequence+'X'
37     set ='CDSQKIPTFNGHLRWAVEYMXcdsqkiptfnghlrwaveym'
38     sequence = ''.join([c for c in sequence if c in set])
39
40     return(sequence)    
41
42 def from_pdb(file):
43     sequence = []
44     ssbond = []
45     ssbond_ch = []
46     ires = []
47     chain_start = {}
48     chain_end = {}
49     unres_shift = {}
50     chain=[]
51     ichain=0
52     newchain = True
53     
54     for line in file:
55             if line[0:6] == 'COMPND' and line[11:17] == 'CHAIN:':
56               tmp=line[18:]
57               chain_=tmp.split(', ')
58               chain_[-1]=chain_[-1][0]
59               chain.extend(chain_)
60     
61             if line[0:6] == 'ATOM  ' and line[13:15] == 'CA':
62               aa = three_to_one.get(line[17:20])
63               i = int(line[22:26])
64               if newchain or i!=ires[-1]:
65                 sequence.append(aa)
66                 ires.append(i)
67                 if newchain:
68                  if len(chain)>0:
69                   chain_start[chain[ichain]]=i
70                  newchain = False
71             if line[0:3] == 'TER':
72               sequence.append('XX')
73               if len(chain)>0:
74                chain_end[chain[ichain]]=i
75               ichain=ichain+1
76               newchain = True
77             if line[0:6] == 'SSBOND':
78               b=[]
79               b.append(int(line[17:21]))
80               b.append(int(line[31:35]))
81               ssbond.append(b)
82               c = []
83               c.append((line[15:16]))
84               c.append((line[29:30]))
85               ssbond_ch.append(c)                                                                      
86             if line[0:3] == 'END':
87               break
88     while sequence[-1] == 'XX':
89             del sequence[-1]
90     if sequence[0] != 'G':
91             sequence.insert(0,'X')
92             ssbond=[ [e[0]+1,e[1]+1] for e in ssbond]
93     if sequence[-1] != 'G':
94             sequence.append('X')
95     seq=''.join(sequence)
96 #    if ires[0] != 1:
97 #            ssbond=[ [e[0]-ires[0]+1,e[1]-ires[0]+1] for e in ssbond]
98     i=0
99     for c in chain:
100       unres_shift[c]=i+chain_start[c]
101       i=i-(chain_end[c]-chain_start[c])-3
102     ssbond=[ [e[0]-unres_shift[c[0]]+1,e[1]-unres_shift[c[1]]+1] for e,c in zip(ssbond,ssbond_ch)]     
103
104     return seq,json.dumps(ssbond)
105
106
107 @login_required
108 def index(request):
109     user = request.user
110     tasks = Task.objects.filter(owner=user).order_by('-created_date')
111     variable = ''
112     return render(request, "index.html", {
113             'tasks': tasks, 'alldone': 0
114         })
115
116 @login_required
117 def add(request):
118     if request.method == 'POST':
119         form = TaskForm(request.POST)
120         if form.is_valid():
121             name = form.cleaned_data["name"]
122             user = request.user
123             task = Task(name=name,owner=user,ready=False)
124             task.save()
125             return redirect('add_min',task_id=task.id)
126     return redirect('/')
127
128 @login_required
129 def add_min(request,task_id):
130     task = get_object_or_404(Task, id=task_id)
131     if request.method == 'POST':
132      if '_example' in request.POST:
133         data= {'name':task.name,'pdbid':'1BDD'}
134         form = TaskForm_min(initial=data)     
135      else:
136         form = TaskForm_min(request.POST,request.FILES)
137         if form.is_valid():
138              task.name=form.cleaned_data["name"]
139              task.type="min"
140              pdbid=form.cleaned_data["pdbid"]
141
142              basename = str(task.owner)
143              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
144              task.jobdirname = "_".join([basename, suffix])
145
146              if pdbid:
147               os.mkdir(task.jobdirname)
148               task.myfile1,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
149                      task.jobdirname+'/plik.pdb')     
150               task.pdbcode=pdbid
151              else:
152               task.myfile1=form.cleaned_data["file1"]
153
154              seq,task.ssbond=from_pdb(task.myfile1)
155              task.md_seq=""
156              for i in range(0,len(seq),40):
157                     task.md_seq=task.md_seq+seq[i:i+40]+" "
158
159              task.ready=True
160              
161              task.save()
162              if is_lazy_user(request.user):
163               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')              
164              else:
165               return redirect('/')
166     else:
167         data= {'name':task.name}
168         form = TaskForm_min(initial=data)
169     p_type='minimization'
170     basic_adv=True    
171     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
172
173 @login_required
174 def add_min_a(request,task_id):
175     task = get_object_or_404(Task, id=task_id)
176     if request.method == 'POST':
177      if '_example' in request.POST:
178         data= {'name':task.name,'pdbid':'1EI0','unres_ff':'opt-wtfsa-2'}
179         form = TaskForm_min_a(initial=data)     
180      else:
181         form = TaskForm_min_a(request.POST,request.FILES)
182         if form.is_valid():
183              task.name=form.cleaned_data["name"]
184              task.type="min"
185              task.min_choice=form.cleaned_data["min_choice"]
186              task.min_overlap=form.cleaned_data["min_overlap"]
187              task.min_searchsc=form.cleaned_data["min_searchsc"]
188              task.min_maxmin=form.cleaned_data["min_maxmin"]
189              task.min_maxfun=form.cleaned_data["min_maxfun"]
190              task.min_pdbout=form.cleaned_data["min_pdbout"]
191
192              basename = str(task.owner)
193              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
194              task.jobdirname = "_".join([basename, suffix])
195              
196              pdbid=form.cleaned_data["pdbid"]
197              if pdbid:
198               os.mkdir(task.jobdirname)
199               task.myfile1,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
200                      task.jobdirname+'/plik.pdb')     
201               task.pdbcode=pdbid
202              else:
203               task.myfile1=form.cleaned_data["file1"]
204
205              task.min_unres_pdb=form.cleaned_data["min_unres_pdb"]
206              task.unres_ff=form.cleaned_data["unres_ff"]
207              task.boxx=form.cleaned_data["boxx"]
208              task.boxy=form.cleaned_data["boxy"]             
209              task.boxz=form.cleaned_data["boxz"]             
210
211              seq,task.ssbond=from_pdb(task.myfile1)
212              task.md_seq=""
213              for i in range(0,len(seq),40):
214                 task.md_seq=task.md_seq+seq[i:i+40]+" "
215                                                            
216              task.ready=True
217              
218              task.save()
219              if is_lazy_user(request.user):
220               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')             
221              else:
222               return redirect('/')
223     else:
224         data= {'name':task.name}
225         form = TaskForm_min_a(initial=data)
226     basic_adv=False
227     p_type='minimization - advanced options'
228     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
229
230 @login_required
231 def add_md(request,task_id):
232     task = get_object_or_404(Task, id=task_id)
233     if request.method == 'POST':
234      if '_example' in request.POST:
235         data= {'name':task.name,'pdbid':'1IGD','md_start':'pdbstart',
236         'md_pdbref':True,'md_temp':200}
237         form = TaskForm_md(initial=data)     
238      else:
239         form = TaskForm_md(request.POST,request.FILES)
240         if form.is_valid():
241              task.name=form.cleaned_data["name"]
242              task.type="md"
243              task.md_seed=form.cleaned_data["md_seed"]
244              task.md_start=form.cleaned_data["md_start"]
245              task.md_temp=form.cleaned_data["md_temp"]
246              task.md_nstep=form.cleaned_data["md_nstep"]
247
248              basename = str(task.owner)
249              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
250              task.jobdirname = "_".join([basename, suffix])
251
252              pdbid=form.cleaned_data["pdbid"]
253              if pdbid:
254               os.mkdir(task.jobdirname)
255               task.myfile1,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
256                      task.jobdirname+'/plik.pdb')     
257               task.pdbcode=pdbid
258              else:
259               task.myfile1=form.cleaned_data["file1"]
260              task.md_pdbref=form.cleaned_data["md_pdbref"]             
261
262              task.md_seq=""
263              if task.md_start == "pdbstart" or task.md_pdbref:
264                seq,task.ssbond=from_pdb(task.myfile1)
265              else:
266                seq=seq_add_x(form.cleaned_data["md_seq"])
267                        
268              for i in range(0,len(seq),40):
269                 task.md_seq=task.md_seq+seq[i:i+40]+" "
270              
271              if task.md_start != "pdbstart":
272                 task.ssbond=''
273
274              task.ready=True
275              
276              task.save()
277              if is_lazy_user(request.user):
278               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
279              else:
280               return redirect('/')
281     else:
282         data= {'name':task.name}
283         form = TaskForm_md(initial=data)
284     basic_adv=True
285     p_type='molecular dynamics'
286     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
287
288 @login_required
289 def add_md_a(request,task_id):
290     task = get_object_or_404(Task, id=task_id)
291     if request.method == 'POST':
292      if '_example' in request.POST:
293         data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf',
294          'md_pdbref':True,'md_mdpdb':True}
295         form = TaskForm_md_a(initial=data)     
296      else:
297         form = TaskForm_md_a(request.POST,request.FILES)
298         if form.is_valid():
299              task.name=form.cleaned_data["name"]
300              task.type="md"
301
302              basename = str(task.owner)
303              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
304              task.jobdirname = "_".join([basename, suffix])
305
306              pdbid=form.cleaned_data["pdbid"]
307              if pdbid:
308               os.mkdir(task.jobdirname)
309               task.myfile1,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
310                      task.jobdirname+'/plik.pdb')     
311               task.pdbcode=pdbid
312              else:
313               task.myfile1=form.cleaned_data["file1"]
314              task.md_start=form.cleaned_data["md_start"]
315              task.md_pdbref=form.cleaned_data["md_pdbref"]             
316
317              task.md_seq=""
318              if task.md_start == "pdbstart" or task.md_pdbref:
319                seq,task.ssbond=from_pdb(task.myfile1)
320              else:
321                seq=seq_add_x(form.cleaned_data["md_seq"])
322              for i in range(0,len(seq),40):
323                 task.md_seq=task.md_seq+seq[i:i+40]+" "
324
325              if task.md_start != "pdbstart":
326                 task.ssbond=''
327
328              task.md_seed=form.cleaned_data["md_seed"]
329
330              task.md_temp=form.cleaned_data["md_temp"]
331              task.md_nstep=form.cleaned_data["md_nstep"]
332              task.md_ntwe=form.cleaned_data["md_ntwe"]
333              task.md_ntwx=form.cleaned_data["md_ntwx"]
334              task.md_dt=form.cleaned_data["md_dt"]
335              task.md_lang=form.cleaned_data["md_lang"]
336              task.md_tau=form.cleaned_data["md_tau"]
337              task.md_scal_fric=form.cleaned_data["md_scal_fric"]
338              task.md_mdpdb=form.cleaned_data["md_mdpdb"]
339              task.unres_ff=form.cleaned_data["unres_ff"]
340              task.md_respa=form.cleaned_data["md_respa"]             
341              task.boxx=form.cleaned_data["boxx"]
342              task.boxy=form.cleaned_data["boxy"]             
343              task.boxz=form.cleaned_data["boxz"]             
344
345              
346              task.ready=True
347              
348              task.save()
349              if is_lazy_user(request.user):
350               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')             
351              else:
352               return redirect('/')
353     else:
354         data= {'name':task.name}
355         form = TaskForm_md_a(initial=data)
356     basic_adv=False
357     p_type='molecular dynamics - advanced options'
358     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
359
360 @login_required
361 def add_remd(request,task_id):
362     task = get_object_or_404(Task, id=task_id)
363     if request.method == 'POST':
364      if '_example' in request.POST:
365         data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True}
366         form = TaskForm_remd(initial=data)     
367      else:
368         form = TaskForm_remd(request.POST,request.FILES)
369         if form.is_valid():
370              task.name=form.cleaned_data["name"]
371              task.type="remd"
372              task.md_start=form.cleaned_data["md_start"]
373
374              basename = str(task.owner)
375              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
376              task.jobdirname = "_".join([basename, suffix])
377
378              pdbid=form.cleaned_data["pdbid"]
379              if pdbid:
380               os.mkdir(task.jobdirname)
381               task.myfile1,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
382                      task.jobdirname+'/plik.pdb')     
383               task.pdbcode=pdbid
384              else:
385               task.myfile1=form.cleaned_data["file1"]
386              task.md_pdbref=form.cleaned_data["md_pdbref"]
387              task.md_ntwx=task.remd_nstex 
388
389              task.md_seq=""
390              if task.md_start == "pdbstart" or task.md_pdbref:
391                seq,task.ssbond=from_pdb(task.myfile1)
392              else:
393                seq=seq_add_x(form.cleaned_data["md_seq"])
394              for i in range(0,len(seq),40):
395                 task.md_seq=task.md_seq+seq[i:i+40]+" "
396
397              if task.md_start != "pdbstart":
398                 task.ssbond=''
399
400              task.md_seed=form.cleaned_data["md_seed"]
401
402              task.md_nstep=form.cleaned_data["md_nstep"]
403
404
405              task.ready=True
406              
407              
408              task.save()
409              if is_lazy_user(request.user):
410               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')             
411              else:
412               return redirect('/')
413     else:
414         data= {'name':task.name}
415         form = TaskForm_remd(initial=data)
416     basic_adv=True
417     p_type='replica exchange molecular dynamics'
418     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
419
420 @login_required
421 def add_remd_a(request,task_id):
422     from django.core.files.uploadedfile import UploadedFile
423     task = get_object_or_404(Task, id=task_id)
424     if request.method == 'POST':
425      if '_example' in request.POST:
426         data= {'name':task.name,'pdbid':'1E0G','md_pdbref':True,
427          'md_nstep':500000,'md_lang':'berendsen','unres_ff':'opt-wtfsa-2',
428          'remd_cluter_temp':280}
429         form = TaskForm_remd_a(initial=data)     
430      elif '_example_saxs' in request.POST:
431         data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True,
432          'md_nstep':200000,'md_lang':'langevin','unres_ff':'E0LL2Y',
433          'remd_cluter_temp':270, 
434          'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
435 """ 0.5     1.33868e-02
436  1.5     1.95880e-02
437  2.5     2.68896e-02
438  3.5     3.43737e-02
439  4.5     4.07099e-02
440  5.5     4.47875e-02
441  6.5     4.63486e-02
442  7.5     4.60514e-02
443  8.5     4.49130e-02
444  9.5     4.36744e-02
445 10.5     4.26085e-02
446 11.5     4.17464e-02
447 12.5     4.11217e-02
448 13.5     4.07835e-02
449 14.5     4.06776e-02
450 15.5     4.06060e-02
451 16.5     4.03241e-02
452 17.5     3.96655e-02
453 18.5     3.85756e-02
454 19.5     3.70537e-02
455 20.5     3.50982e-02
456 21.5     3.27236e-02
457 22.5     3.00046e-02
458 23.5     2.70643e-02
459 24.5     2.40044e-02
460 25.5     2.08595e-02
461 26.5     1.76342e-02
462 27.5     1.43802e-02
463 28.5     1.12281e-02
464 29.5     8.34574e-03
465 30.5     5.87354e-03
466 31.5     3.88732e-03
467 32.5     2.39755e-03
468 33.5     1.36323e-03
469 34.5     7.06686e-04
470 35.5     3.30592e-04
471 36.5     1.38359e-04"""}
472         form = TaskForm_remd_a(initial=data)     
473      else:
474         form = TaskForm_remd_a(request.POST,request.FILES)
475         if form.is_valid():
476              task.name=form.cleaned_data["name"]
477              task.type="remd"
478
479              basename = str(task.owner)
480              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
481              task.jobdirname = "_".join([basename, suffix])
482
483              pdbid=form.cleaned_data["pdbid"]
484              if pdbid:
485               os.mkdir(task.jobdirname)
486               task.myfile1,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
487                      task.jobdirname+'/plik.pdb')     
488               task.pdbcode=pdbid
489              else:
490               task.myfile1=form.cleaned_data["file1"]
491              task.md_start=form.cleaned_data["md_start"]  
492              task.md_pdbref=form.cleaned_data["md_pdbref"]                        
493
494              task.md_seq=""
495              if task.md_start == "pdbstart" or task.md_pdbref:
496                seq,task.ssbond=from_pdb(task.myfile1)
497              else:
498                seq=seq_add_x(form.cleaned_data["md_seq"])
499              for i in range(0,len(seq),40):
500                 task.md_seq=task.md_seq+seq[i:i+40]+" "
501
502              if task.md_start != "pdbstart":
503                 task.ssbond=''
504
505              task.md_seed=form.cleaned_data["md_seed"]
506              task.md_nstep=form.cleaned_data["md_nstep"]
507              task.md_dt=form.cleaned_data["md_dt"]
508              task.md_lang=form.cleaned_data["md_lang"]
509              task.md_tau=form.cleaned_data["md_tau"]
510              task.md_scal_fric=form.cleaned_data["md_scal_fric"]
511              task.remd_nrep=form.cleaned_data["remd_nrep"]
512              task.remd_nstex=form.cleaned_data["remd_nstex"]
513              task.md_ntwx=form.cleaned_data["md_ntwx"]             
514              task.md_ntwe=form.cleaned_data["md_ntwe"]
515              task.md_respa=form.cleaned_data["md_respa"]
516 #             task.remd_traj1file=form.cleaned_data["remd_traj1file"]
517 #             task.remd_rest1file=form.cleaned_data["remd_rest1file"]
518
519              task.boxx=form.cleaned_data["boxx"]
520              task.boxy=form.cleaned_data["boxy"]             
521              task.boxz=form.cleaned_data["boxz"]             
522
523              task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
524              task.unres_ff=form.cleaned_data["unres_ff"]
525              
526              task.scal_rad = form.cleaned_data["scal_rad"]
527              task.saxs_data = form.cleaned_data["saxs_data"]
528              task.wsaxs = form.cleaned_data["wsaxs"]
529              
530              task.save()
531              return redirect('addmlist',task_id=task.id)
532     else:
533         data= {'name':task.name}
534         form = TaskForm_remd_a(initial=data)
535     basic_adv=False
536     p_type='replica exchange molecular dynamics - advanced options'
537     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
538
539 @login_required
540 def addmlist(request,task_id):
541     task = get_object_or_404(Task, id=task_id)
542     if request.method == 'POST':
543         form = TaskForm_list(task.remd_nrep,request.POST)
544         if form.is_valid():
545              task.remd_multi_t=form.cleaned_data["temperatures"]
546              task.remd_multi_m=form.cleaned_data["multiplexing"]             
547              task.ready=True
548              
549              task.save()
550              if is_lazy_user(request.user):
551               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')              
552              else:
553               return redirect('/')
554     else:
555       if task.unres_ff == 'E0LL2Y':
556         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
557         '["1", "1", "1", "1", "1", "1", "1", "1"]',
558         'temperatures':
559         '["270", "280", "290", "300", "310", "320", "330", "345"]'
560         }
561       else: 
562         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
563         '["1", "1", "1", "1", "1", "1", "1", "1"]',
564         'temperatures':
565         '["250", "260", "270", "280", "290", "300", "315", "330"]'
566         }
567       
568       form = TaskForm_list(task.remd_nrep,initial=data)
569     p_type='replica exchange molecular dynamics - advanced options'
570     return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
571
572 @login_required
573 def details(request,task_id):
574     task = get_object_or_404(Task, id=task_id)
575     return render(request, "details.html",{'task':task})
576
577
578 def details1(request,user_id,task_id):
579     task = get_object_or_404(Task, id=task_id)
580     return render(request, "details1.html",{'task':task})
581
582
583 @login_required
584 def delete(request, task_id):
585     Task.objects.get(id=task_id).delete()
586     return redirect('/')
587
588 def refresh_done1(request, task_id):
589     task = get_object_or_404(Task, id=task_id)
590     user = task.owner
591     refresh_done0(task)
592
593     proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
594     njob=0
595     nq=0
596     for line in proc.stdout:
597       if 'piasek4' in line:
598         if line.split()[1]=='test_server':
599           njob+=1
600           if line.split()[-2]=='Q':
601             nq+=1
602     variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
603
604     return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
605
606
607 @login_required
608 def refresh_done(request):
609     user = request.user
610     tasks = Task.objects.filter(owner=user).order_by('-created_date')
611     alldone = 1
612     for task in tasks:
613       refresh_done0(task)
614       if not task.done:
615          alldone=0
616
617     proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
618     njob=0
619     nq=0
620     for line in proc.stdout:
621       if 'piasek4' in line:
622         if line.split()[1]=='test_server':
623           njob+=1
624           if line.split()[-2]=='Q':
625             nq+=1
626     variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
627
628     if is_lazy_user(request.user):
629      return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
630     else:
631      return render(request, "index.html", {
632                 'tasks': tasks ,
633                 'variable' : variable,
634                 'alldone': alldone
635                         })
636
637       
638 def refresh_done0(task):
639       if os.path.isfile(task.jobdirname+'/finished') and not task.done:
640          task.done=True
641
642          with open(task.jobdirname+'/file.out_GB000', 'r') as f:
643
644            if task.type=='min' or task.type=='md':
645              text=""
646              for line in f:
647                if 'ETOT' in line:
648                   task.etot=line.split()[1]
649
650                if 'RMS deviation' in line:
651                   text=text+line
652                   i=1
653                   for line1 in f:
654                      text=text+line1
655                      i+=1
656                      if i>6:
657                        break
658                if 'Total wall' in line:
659                   text=text+line
660                   
661            elif task.type=='remd':
662              j=0
663              text="Acceptance for replica exchanges and number of exchange attempts\n"
664              for line in f:
665                         
666                if 'ACC' in line:
667                     j+=1
668                     text=text+' '.join(line.split()[2:])+"\n"
669                     if j==task.remd_nrep:
670                        j=1
671                        text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
672
673                if 'Total wall' in line:
674                   text=text+line
675                        
676          task.results_text=text
677
678
679          if task.md_pdbref and task.type=='remd':
680          
681           for i in range(1,6):
682            try:
683             with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
684                  line=f.readline()
685                  if i==1:
686                      task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
687                  elif i==2:
688                      task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
689                  elif i==3:
690                      task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
691                  elif i==4:
692                      task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
693                  elif i==5:
694                      task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
695            except EnvironmentError:
696             print 'file_wham_T*pdb open error'
697           for i in range(1,6):
698             with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
699                text=''
700                for line in f:
701                  if 'RMSD of  the common residues=' in line:
702                    text=' RMSD='+line.split()[5]
703                  if 'TM-score    =' in line:
704                    text=text+' TMscore='+line.split()[2]
705                  if 'GDT-TS-score=' in line:
706                    text=text+' GDT_TS='+line.split()[1]
707                     
708                if i==1:
709                      task.remd_model1=task.remd_model1+text
710                elif i==2:
711                      task.remd_model2=task.remd_model2+text
712                elif i==3:
713                      task.remd_model3=task.remd_model3+text
714                elif i==4:
715                      task.remd_model4=task.remd_model4+text
716                elif i==5:
717                      task.remd_model5=task.remd_model5+text
718
719
720
721          if task.type=='remd':  
722           with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
723
724            for line in f:
725              if 'sumprob' in line:
726                 i=0
727                 for line1 in f:
728                   i+=1
729                   if i>6:
730                        break
731                   if i==1:
732                      task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
733                   elif i==2:
734                      task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
735                   elif i==3:
736                      task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
737                   elif i==4:
738                      task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
739                   elif i==5:
740                      task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
741                      
742          
743
744          task.save()
745       elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
746          if (task.type=='min'):
747            task.running =1
748          else:
749            with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
750               line=''
751               for line in f:
752                 pass
753               if line != '':
754                 last = line.split()[0]
755               else:
756                 last = 0
757            task.running=int(1+int(last)*100.0/task.md_nstep)
758            if task.running>100:
759              task.running=100
760          task.save()
761
762     
763       return