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