2f358cc06bde1a08b5801b5b5e5db786aea4b4b5
[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' and sequence[0] != 'g':
29         sequence='X'+sequence
30     if sequence[-1] != 'G' and sequence[-1] != 'g':
31         sequence=sequence+'X'
32     set ='CDSQKIPTFNGHLRWAVEYMXcdsqkiptfnghlrwaveym'
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.md_respa=form.cleaned_data["md_respa"]             
336              task.boxx=form.cleaned_data["boxx"]
337              task.boxy=form.cleaned_data["boxy"]             
338              task.boxz=form.cleaned_data["boxz"]             
339
340              
341              task.ready=True
342              
343              task.save()
344              if is_lazy_user(request.user):
345               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')             
346              else:
347               return redirect('/')
348     else:
349         data= {'name':task.name}
350         form = TaskForm_md_a(initial=data)
351     basic_adv=False
352     p_type='molecular dynamics - advanced options'
353     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
354
355 @login_required
356 def add_remd(request,task_id):
357     task = get_object_or_404(Task, id=task_id)
358     if request.method == 'POST':
359      if '_example' in request.POST:
360         data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True}
361         form = TaskForm_remd(initial=data)     
362      else:
363         form = TaskForm_remd(request.POST,request.FILES)
364         if form.is_valid():
365              task.name=form.cleaned_data["name"]
366              task.type="remd"
367              task.md_start=form.cleaned_data["md_start"]
368
369              basename = str(task.owner)
370              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
371              task.jobdirname = "_".join([basename, suffix])
372
373              pdbid=form.cleaned_data["pdbid"]
374              if pdbid:
375               os.mkdir(task.jobdirname)
376               task.myfile1,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
377                      task.jobdirname+'/plik.pdb')     
378               task.pdbcode=pdbid
379              else:
380               task.myfile1=form.cleaned_data["file1"]
381              task.md_pdbref=form.cleaned_data["md_pdbref"]
382              task.md_ntwx=task.remd_nstex 
383
384              task.md_seq=""
385              if task.md_start == "pdbstart" or task.md_pdbref:
386                seq,task.ssbond=from_pdb(task.myfile1)
387              else:
388                seq=seq_add_x(form.cleaned_data["md_seq"])
389              for i in range(0,len(seq),40):
390                 task.md_seq=task.md_seq+seq[i:i+40]+" "
391
392              if task.md_start != "pdbstart":
393                 task.ssbond=''
394
395              task.md_seed=form.cleaned_data["md_seed"]
396
397              task.md_nstep=form.cleaned_data["md_nstep"]
398
399
400              task.ready=True
401              
402              
403              task.save()
404              if is_lazy_user(request.user):
405               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')             
406              else:
407               return redirect('/')
408     else:
409         data= {'name':task.name}
410         form = TaskForm_remd(initial=data)
411     basic_adv=True
412     p_type='replica exchange molecular dynamics'
413     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
414
415 @login_required
416 def add_remd_a(request,task_id):
417     from django.core.files.uploadedfile import UploadedFile
418     task = get_object_or_404(Task, id=task_id)
419     if request.method == 'POST':
420      if '_example' in request.POST:
421         data= {'name':task.name,'pdbid':'1E0G','md_pdbref':True,
422          'md_nstep':500000,'md_lang':'berendsen','unres_ff':'opt-wtfsa-2',
423          'remd_cluter_temp':280}
424         form = TaskForm_remd_a(initial=data)     
425      elif '_example_saxs' in request.POST:
426         data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True,
427          'md_nstep':200000,'md_lang':'langevin','unres_ff':'E0LL2Y',
428          'remd_cluter_temp':270, 
429          'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
430 """ 0.5     1.33868e-02
431  1.5     1.95880e-02
432  2.5     2.68896e-02
433  3.5     3.43737e-02
434  4.5     4.07099e-02
435  5.5     4.47875e-02
436  6.5     4.63486e-02
437  7.5     4.60514e-02
438  8.5     4.49130e-02
439  9.5     4.36744e-02
440 10.5     4.26085e-02
441 11.5     4.17464e-02
442 12.5     4.11217e-02
443 13.5     4.07835e-02
444 14.5     4.06776e-02
445 15.5     4.06060e-02
446 16.5     4.03241e-02
447 17.5     3.96655e-02
448 18.5     3.85756e-02
449 19.5     3.70537e-02
450 20.5     3.50982e-02
451 21.5     3.27236e-02
452 22.5     3.00046e-02
453 23.5     2.70643e-02
454 24.5     2.40044e-02
455 25.5     2.08595e-02
456 26.5     1.76342e-02
457 27.5     1.43802e-02
458 28.5     1.12281e-02
459 29.5     8.34574e-03
460 30.5     5.87354e-03
461 31.5     3.88732e-03
462 32.5     2.39755e-03
463 33.5     1.36323e-03
464 34.5     7.06686e-04
465 35.5     3.30592e-04
466 36.5     1.38359e-04"""}
467         form = TaskForm_remd_a(initial=data)     
468      else:
469         form = TaskForm_remd_a(request.POST,request.FILES)
470         if form.is_valid():
471              task.name=form.cleaned_data["name"]
472              task.type="remd"
473
474              basename = str(task.owner)
475              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
476              task.jobdirname = "_".join([basename, suffix])
477
478              pdbid=form.cleaned_data["pdbid"]
479              if pdbid:
480               os.mkdir(task.jobdirname)
481               task.myfile1,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
482                      task.jobdirname+'/plik.pdb')     
483               task.pdbcode=pdbid
484              else:
485               task.myfile1=form.cleaned_data["file1"]
486              task.md_start=form.cleaned_data["md_start"]  
487              task.md_pdbref=form.cleaned_data["md_pdbref"]                        
488
489              task.md_seq=""
490              if task.md_start == "pdbstart" or task.md_pdbref:
491                seq,task.ssbond=from_pdb(task.myfile1)
492              else:
493                seq=seq_add_x(form.cleaned_data["md_seq"])
494              for i in range(0,len(seq),40):
495                 task.md_seq=task.md_seq+seq[i:i+40]+" "
496
497              if task.md_start != "pdbstart":
498                 task.ssbond=''
499
500              task.md_seed=form.cleaned_data["md_seed"]
501              task.md_nstep=form.cleaned_data["md_nstep"]
502              task.md_dt=form.cleaned_data["md_dt"]
503              task.md_lang=form.cleaned_data["md_lang"]
504              task.md_tau=form.cleaned_data["md_tau"]
505              task.md_scal_fric=form.cleaned_data["md_scal_fric"]
506              task.remd_nrep=form.cleaned_data["remd_nrep"]
507              task.remd_nstex=form.cleaned_data["remd_nstex"]
508              task.md_ntwx=form.cleaned_data["md_ntwx"]             
509              task.md_ntwe=form.cleaned_data["md_ntwe"]
510              task.md_respa=form.cleaned_data["md_respa"]
511 #             task.remd_traj1file=form.cleaned_data["remd_traj1file"]
512 #             task.remd_rest1file=form.cleaned_data["remd_rest1file"]
513
514              task.boxx=form.cleaned_data["boxx"]
515              task.boxy=form.cleaned_data["boxy"]             
516              task.boxz=form.cleaned_data["boxz"]             
517
518              task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
519              task.unres_ff=form.cleaned_data["unres_ff"]
520              
521              task.scal_rad = form.cleaned_data["scal_rad"]
522              task.saxs_data = form.cleaned_data["saxs_data"]
523              task.wsaxs = form.cleaned_data["wsaxs"]
524              
525              task.save()
526              return redirect('addmlist',task_id=task.id)
527     else:
528         data= {'name':task.name}
529         form = TaskForm_remd_a(initial=data)
530     basic_adv=False
531     p_type='replica exchange molecular dynamics - advanced options'
532     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
533
534 @login_required
535 def addmlist(request,task_id):
536     task = get_object_or_404(Task, id=task_id)
537     if request.method == 'POST':
538         form = TaskForm_list(task.remd_nrep,request.POST)
539         if form.is_valid():
540              task.remd_multi_t=form.cleaned_data["temperatures"]
541              task.remd_multi_m=form.cleaned_data["multiplexing"]             
542              task.ready=True
543              
544              task.save()
545              if is_lazy_user(request.user):
546               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')              
547              else:
548               return redirect('/')
549     else:
550       if task.unres_ff == 'E0LL2Y':
551         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
552         '["1", "1", "1", "1", "1", "1", "1", "1"]',
553         'temperatures':
554         '["270", "280", "290", "300", "310", "320", "330", "345"]'
555         }
556       else: 
557         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
558         '["1", "1", "1", "1", "1", "1", "1", "1"]',
559         'temperatures':
560         '["250", "260", "270", "280", "290", "300", "315", "330"]'
561         }
562       
563       form = TaskForm_list(task.remd_nrep,initial=data)
564     p_type='replica exchange molecular dynamics - advanced options'
565     return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
566
567 @login_required
568 def details(request,task_id):
569     task = get_object_or_404(Task, id=task_id)
570     return render(request, "details.html",{'task':task})
571
572
573 def details1(request,user_id,task_id):
574     task = get_object_or_404(Task, id=task_id)
575     return render(request, "details1.html",{'task':task})
576
577
578 @login_required
579 def delete(request, task_id):
580     Task.objects.get(id=task_id).delete()
581     return redirect('/')
582
583 def refresh_done1(request, task_id):
584     task = get_object_or_404(Task, id=task_id)
585     user = task.owner
586     refresh_done0(task)
587
588     proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
589     njob=0
590     nq=0
591     for line in proc.stdout:
592       if 'piasek4' in line:
593         if line.split()[1]=='test_server':
594           njob+=1
595           if line.split()[-2]=='Q':
596             nq+=1
597     variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
598
599     return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
600
601
602 @login_required
603 def refresh_done(request):
604     user = request.user
605     tasks = Task.objects.filter(owner=user).order_by('-created_date')
606     for task in tasks:
607       refresh_done0(task)
608
609     proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
610     njob=0
611     nq=0
612     for line in proc.stdout:
613       if 'piasek4' in line:
614         if line.split()[1]=='test_server':
615           njob+=1
616           if line.split()[-2]=='Q':
617             nq+=1
618     variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
619
620     if is_lazy_user(request.user):
621      return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
622     else:
623      return render(request, "index.html", {
624                 'tasks': tasks ,
625                 'variable' : variable
626                         })
627
628       
629 def refresh_done0(task):
630       if os.path.isfile(task.jobdirname+'/finished') and not task.done:
631          task.done=True
632
633          with open(task.jobdirname+'/file.out_GB000', 'r') as f:
634
635            if task.type=='min' or task.type=='md':
636              text=""
637              for line in f:
638                if 'ETOT' in line:
639                   task.etot=line.split()[1]
640
641                if 'RMS deviation' in line:
642                   text=text+line
643                   i=1
644                   for line1 in f:
645                      text=text+line1
646                      i+=1
647                      if i>6:
648                        break
649                if 'Total wall' in line:
650                   text=text+line
651                   
652            elif task.type=='remd':
653              j=0
654              text="Acceptance for replica exchanges and number of exchange attempts\n"
655              for line in f:
656                         
657                if 'ACC' in line:
658                     j+=1
659                     text=text+' '.join(line.split()[2:])+"\n"
660                     if j==task.remd_nrep:
661                        j=1
662                        text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
663
664                if 'Total wall' in line:
665                   text=text+line
666                        
667          task.results_text=text
668
669
670          if task.md_pdbref and task.type=='remd':
671          
672           for i in range(1,6):
673            try:
674             with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
675                  line=f.readline()
676                  if i==1:
677                      task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
678                  elif i==2:
679                      task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
680                  elif i==3:
681                      task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
682                  elif i==4:
683                      task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
684                  elif i==5:
685                      task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
686            except EnvironmentError:
687             print 'file_wham_T*pdb open error'
688           for i in range(1,6):
689             with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
690                text=''
691                for line in f:
692                  if 'RMSD of  the common residues=' in line:
693                    text=' RMSD='+line.split()[5]
694                  if 'TM-score    =' in line:
695                    text=text+' TMscore='+line.split()[2]
696                  if 'GDT-TS-score=' in line:
697                    text=text+' GDT_TS='+line.split()[1]
698                     
699                if i==1:
700                      task.remd_model1=task.remd_model1+text
701                elif i==2:
702                      task.remd_model2=task.remd_model2+text
703                elif i==3:
704                      task.remd_model3=task.remd_model3+text
705                elif i==4:
706                      task.remd_model4=task.remd_model4+text
707                elif i==5:
708                      task.remd_model5=task.remd_model5+text
709
710
711
712          if task.type=='remd':  
713           with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
714
715            for line in f:
716              if 'sumprob' in line:
717                 i=0
718                 for line1 in f:
719                   i+=1
720                   if i>6:
721                        break
722                   if i==1:
723                      task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
724                   elif i==2:
725                      task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
726                   elif i==3:
727                      task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
728                   elif i==4:
729                      task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
730                   elif i==5:
731                      task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
732                      
733          
734
735          task.save()
736       elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
737          if (task.type=='min'):
738            task.running =1
739          else:
740            with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
741               line=''
742               for line in f:
743                 pass
744               if line != '':
745                 last = line.split()[0]
746               else:
747                 last = 0
748            task.running=int(1+int(last)*100.0/task.md_nstep)
749            if task.running>100:
750              task.running=100
751          task.save()
752
753     
754       return