1c7434c2a636bd3d2e9d1c06f70e01acde8411f8
[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
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     for task in tasks:
612       refresh_done0(task)
613
614     proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
615     njob=0
616     nq=0
617     for line in proc.stdout:
618       if 'piasek4' in line:
619         if line.split()[1]=='test_server':
620           njob+=1
621           if line.split()[-2]=='Q':
622             nq+=1
623     variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
624
625     if is_lazy_user(request.user):
626      return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
627     else:
628      return render(request, "index.html", {
629                 'tasks': tasks ,
630                 'variable' : variable
631                         })
632
633       
634 def refresh_done0(task):
635       if os.path.isfile(task.jobdirname+'/finished') and not task.done:
636          task.done=True
637
638          with open(task.jobdirname+'/file.out_GB000', 'r') as f:
639
640            if task.type=='min' or task.type=='md':
641              text=""
642              for line in f:
643                if 'ETOT' in line:
644                   task.etot=line.split()[1]
645
646                if 'RMS deviation' in line:
647                   text=text+line
648                   i=1
649                   for line1 in f:
650                      text=text+line1
651                      i+=1
652                      if i>6:
653                        break
654                if 'Total wall' in line:
655                   text=text+line
656                   
657            elif task.type=='remd':
658              j=0
659              text="Acceptance for replica exchanges and number of exchange attempts\n"
660              for line in f:
661                         
662                if 'ACC' in line:
663                     j+=1
664                     text=text+' '.join(line.split()[2:])+"\n"
665                     if j==task.remd_nrep:
666                        j=1
667                        text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
668
669                if 'Total wall' in line:
670                   text=text+line
671                        
672          task.results_text=text
673
674
675          if task.md_pdbref and task.type=='remd':
676          
677           for i in range(1,6):
678            try:
679             with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
680                  line=f.readline()
681                  if i==1:
682                      task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
683                  elif i==2:
684                      task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
685                  elif i==3:
686                      task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
687                  elif i==4:
688                      task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
689                  elif i==5:
690                      task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
691            except EnvironmentError:
692             print 'file_wham_T*pdb open error'
693           for i in range(1,6):
694             with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
695                text=''
696                for line in f:
697                  if 'RMSD of  the common residues=' in line:
698                    text=' RMSD='+line.split()[5]
699                  if 'TM-score    =' in line:
700                    text=text+' TMscore='+line.split()[2]
701                  if 'GDT-TS-score=' in line:
702                    text=text+' GDT_TS='+line.split()[1]
703                     
704                if i==1:
705                      task.remd_model1=task.remd_model1+text
706                elif i==2:
707                      task.remd_model2=task.remd_model2+text
708                elif i==3:
709                      task.remd_model3=task.remd_model3+text
710                elif i==4:
711                      task.remd_model4=task.remd_model4+text
712                elif i==5:
713                      task.remd_model5=task.remd_model5+text
714
715
716
717          if task.type=='remd':  
718           with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
719
720            for line in f:
721              if 'sumprob' in line:
722                 i=0
723                 for line1 in f:
724                   i+=1
725                   if i>6:
726                        break
727                   if i==1:
728                      task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
729                   elif i==2:
730                      task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
731                   elif i==3:
732                      task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
733                   elif i==4:
734                      task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
735                   elif i==5:
736                      task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
737                      
738          
739
740          task.save()
741       elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
742          if (task.type=='min'):
743            task.running =1
744          else:
745            with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
746               line=''
747               for line in f:
748                 pass
749               if line != '':
750                 last = line.split()[0]
751               else:
752                 last = 0
753            task.running=int(1+int(last)*100.0/task.md_nstep)
754            if task.running>100:
755              task.running=100
756          task.save()
757
758     
759       return