6a244b0dfdc04b1469d4f491563c0cae31038370
[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_sorted=[]
51     newchain = True
52     
53     for line in file:
54             if line[0:6] == 'ATOM  ' and line[13:15] == 'CA':
55               aa = three_to_one.get(line[17:20])
56               i = int(line[22:26])
57               ch = line[21:22]
58               if newchain or i!=ires[-1]:
59                 sequence.append(aa)
60                 ires.append(i)
61                 if newchain:
62                  chain_start[ch]=i
63                  chain_sorted.extend(ch)
64                  newchain = False
65             if line[0:3] == 'TER':
66               sequence.append('XX')
67               chain_end[ch]=i
68               newchain = True
69             if line[0:6] == 'SSBOND':
70               b=[]
71               b.append(int(line[17:21]))
72               b.append(int(line[31:35]))
73               ssbond.append(b)
74               c = []
75               c.append((line[15:16]))
76               c.append((line[29:30]))
77               ssbond_ch.append(c)                                                                      
78             if line[0:3] == 'END':
79               break
80     if not sequence[-1] == 'XX':
81             chain_end[ch]=i
82     while sequence[-1] == 'XX':
83             del sequence[-1]
84     if sequence[0] != 'G':
85             sequence.insert(0,'X')
86             ssbond=[ [e[0]+1,e[1]+1] for e in ssbond]
87     if sequence[-1] != 'G':
88             sequence.append('X')
89     seq=''.join(sequence)
90 #    if ires[0] != 1:
91 #            ssbond=[ [e[0]-ires[0]+1,e[1]-ires[0]+1] for e in ssbond]
92     i=0
93     for c in chain_sorted:
94       unres_shift[c]=i+chain_start[c]
95       i=i-(chain_end[c]-chain_start[c])-3
96     ssbond=[ [e[0]-unres_shift[c[0]]+1,e[1]-unres_shift[c[1]]+1] for e,c in zip(ssbond,ssbond_ch)]     
97
98     return seq,json.dumps(ssbond)
99
100
101 @login_required
102 def index(request):
103     user = request.user
104     tasks = Task.objects.filter(owner=user).order_by('-created_date')
105     variable = ''
106     return render(request, "index.html", {
107             'tasks': tasks, 'alldone': 0
108         })
109
110 @login_required
111 def add(request):
112     if request.method == 'POST':
113         form = TaskForm(request.POST)
114         if form.is_valid():
115             name = form.cleaned_data["name"]
116             user = request.user
117             task = Task(name=name,owner=user,ready=False)
118             task.save()
119             return redirect('add_min',task_id=task.id)
120     return redirect('/')
121
122 @login_required
123 def add_min(request,task_id):
124     task = get_object_or_404(Task, id=task_id)
125     if request.method == 'POST':
126      if '_example' in request.POST:
127         data= {'name':task.name,'pdbid':'1BDD'}
128         form = TaskForm_min(initial=data)     
129      else:
130         form = TaskForm_min(request.POST,request.FILES)
131         if form.is_valid():
132              task.name=form.cleaned_data["name"]
133              task.type="min"
134              pdbid=form.cleaned_data["pdbid"]
135
136              basename = str(task.owner)
137              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
138              task.jobdirname = "_".join([basename, suffix])
139
140              if pdbid:
141               os.mkdir(task.jobdirname)
142               task.myfile1,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
143                      task.jobdirname+'/plik.pdb')     
144               task.pdbcode=pdbid
145              else:
146               task.myfile1=form.cleaned_data["file1"]
147
148              seq,task.ssbond=from_pdb(task.myfile1)
149              task.md_seq=""
150              for i in range(0,len(seq),40):
151                     task.md_seq=task.md_seq+seq[i:i+40]+" "
152
153              task.ready=True
154              
155              task.save()
156              if is_lazy_user(request.user):
157               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')              
158              else:
159               return redirect('/')
160     else:
161         data= {'name':task.name}
162         form = TaskForm_min(initial=data)
163     p_type='minimization'
164     basic_adv=True    
165     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
166
167 @login_required
168 def add_min_a(request,task_id):
169     task = get_object_or_404(Task, id=task_id)
170     if request.method == 'POST':
171      if '_example' in request.POST:
172         data= {'name':task.name,'pdbid':'1EI0','unres_ff':'opt-wtfsa-2'}
173         form = TaskForm_min_a(initial=data)     
174      else:
175         form = TaskForm_min_a(request.POST,request.FILES)
176         if form.is_valid():
177              task.name=form.cleaned_data["name"]
178              task.type="min"
179              task.min_choice=form.cleaned_data["min_choice"]
180              task.min_overlap=form.cleaned_data["min_overlap"]
181              task.min_searchsc=form.cleaned_data["min_searchsc"]
182              task.min_maxmin=form.cleaned_data["min_maxmin"]
183              task.min_maxfun=form.cleaned_data["min_maxfun"]
184              task.min_pdbout=form.cleaned_data["min_pdbout"]
185
186              basename = str(task.owner)
187              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
188              task.jobdirname = "_".join([basename, suffix])
189              
190              pdbid=form.cleaned_data["pdbid"]
191              if pdbid:
192               os.mkdir(task.jobdirname)
193               task.myfile1,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
194                      task.jobdirname+'/plik.pdb')     
195               task.pdbcode=pdbid
196              else:
197               task.myfile1=form.cleaned_data["file1"]
198
199              task.min_unres_pdb=form.cleaned_data["min_unres_pdb"]
200              task.unres_ff=form.cleaned_data["unres_ff"]
201              task.boxx=form.cleaned_data["boxx"]
202              task.boxy=form.cleaned_data["boxy"]             
203              task.boxz=form.cleaned_data["boxz"]             
204
205              seq,task.ssbond=from_pdb(task.myfile1)
206              task.md_seq=""
207              for i in range(0,len(seq),40):
208                 task.md_seq=task.md_seq+seq[i:i+40]+" "
209                                                            
210              task.ready=True
211              
212              task.save()
213              if is_lazy_user(request.user):
214               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')             
215              else:
216               return redirect('/')
217     else:
218         data= {'name':task.name}
219         form = TaskForm_min_a(initial=data)
220     basic_adv=False
221     p_type='minimization - advanced options'
222     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
223
224 @login_required
225 def add_md(request,task_id):
226     task = get_object_or_404(Task, id=task_id)
227     if request.method == 'POST':
228      if '_example' in request.POST:
229         data= {'name':task.name,'pdbid':'1IGD','md_start':'pdbstart',
230         'md_pdbref':True,'md_temp':200}
231         form = TaskForm_md(initial=data)     
232      else:
233         form = TaskForm_md(request.POST,request.FILES)
234         if form.is_valid():
235              task.name=form.cleaned_data["name"]
236              task.type="md"
237              task.md_seed=form.cleaned_data["md_seed"]
238              task.md_start=form.cleaned_data["md_start"]
239              task.md_temp=form.cleaned_data["md_temp"]
240              task.md_nstep=form.cleaned_data["md_nstep"]
241
242              basename = str(task.owner)
243              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
244              task.jobdirname = "_".join([basename, suffix])
245
246              pdbid=form.cleaned_data["pdbid"]
247              if pdbid:
248               os.mkdir(task.jobdirname)
249               task.myfile1,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
250                      task.jobdirname+'/plik.pdb')     
251               task.pdbcode=pdbid
252              else:
253               task.myfile1=form.cleaned_data["file1"]
254              task.md_pdbref=form.cleaned_data["md_pdbref"]             
255
256              task.md_seq=""
257              if task.md_start == "pdbstart" or task.md_pdbref:
258                seq,task.ssbond=from_pdb(task.myfile1)
259              else:
260                seq=seq_add_x(form.cleaned_data["md_seq"])
261                        
262              for i in range(0,len(seq),40):
263                 task.md_seq=task.md_seq+seq[i:i+40]+" "
264              
265              if task.md_start != "pdbstart":
266                 task.ssbond=''
267
268              task.ready=True
269              
270              task.save()
271              if is_lazy_user(request.user):
272               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
273              else:
274               return redirect('/')
275     else:
276         data= {'name':task.name}
277         form = TaskForm_md(initial=data)
278     basic_adv=True
279     p_type='molecular dynamics'
280     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
281
282 @login_required
283 def add_md_a(request,task_id):
284     task = get_object_or_404(Task, id=task_id)
285     if request.method == 'POST':
286      if '_example' in request.POST:
287         data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf',
288          'md_pdbref':True,'md_mdpdb':True}
289         form = TaskForm_md_a(initial=data)     
290      else:
291         form = TaskForm_md_a(request.POST,request.FILES)
292         if form.is_valid():
293              task.name=form.cleaned_data["name"]
294              task.type="md"
295
296              basename = str(task.owner)
297              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
298              task.jobdirname = "_".join([basename, suffix])
299
300              pdbid=form.cleaned_data["pdbid"]
301              if pdbid:
302               os.mkdir(task.jobdirname)
303               task.myfile1,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
304                      task.jobdirname+'/plik.pdb')     
305               task.pdbcode=pdbid
306              else:
307               task.myfile1=form.cleaned_data["file1"]
308              task.md_start=form.cleaned_data["md_start"]
309              task.md_pdbref=form.cleaned_data["md_pdbref"]             
310
311              task.md_seq=""
312              if task.md_start == "pdbstart" or task.md_pdbref:
313                seq,task.ssbond=from_pdb(task.myfile1)
314              else:
315                seq=seq_add_x(form.cleaned_data["md_seq"])
316              for i in range(0,len(seq),40):
317                 task.md_seq=task.md_seq+seq[i:i+40]+" "
318
319              if task.md_start != "pdbstart":
320                 task.ssbond=''
321
322              task.md_seed=form.cleaned_data["md_seed"]
323
324              task.md_temp=form.cleaned_data["md_temp"]
325              task.md_nstep=form.cleaned_data["md_nstep"]
326              task.md_ntwe=form.cleaned_data["md_ntwe"]
327              task.md_ntwx=form.cleaned_data["md_ntwx"]
328              task.md_dt=form.cleaned_data["md_dt"]
329              task.md_lang=form.cleaned_data["md_lang"]
330              task.md_tau=form.cleaned_data["md_tau"]
331              task.md_scal_fric=form.cleaned_data["md_scal_fric"]
332              task.md_mdpdb=form.cleaned_data["md_mdpdb"]
333              task.unres_ff=form.cleaned_data["unres_ff"]
334              task.md_respa=form.cleaned_data["md_respa"]             
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.md_respa=form.cleaned_data["md_respa"]
510 #             task.remd_traj1file=form.cleaned_data["remd_traj1file"]
511 #             task.remd_rest1file=form.cleaned_data["remd_rest1file"]
512
513              task.boxx=form.cleaned_data["boxx"]
514              task.boxy=form.cleaned_data["boxy"]             
515              task.boxz=form.cleaned_data["boxz"]             
516
517              task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
518              task.unres_ff=form.cleaned_data["unres_ff"]
519              
520              task.scal_rad = form.cleaned_data["scal_rad"]
521              task.saxs_data = form.cleaned_data["saxs_data"]
522              task.wsaxs = form.cleaned_data["wsaxs"]
523              
524              task.save()
525              return redirect('addmlist',task_id=task.id)
526     else:
527         data= {'name':task.name}
528         form = TaskForm_remd_a(initial=data)
529     basic_adv=False
530     p_type='replica exchange molecular dynamics - advanced options'
531     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
532
533 @login_required
534 def addmlist(request,task_id):
535     task = get_object_or_404(Task, id=task_id)
536     if request.method == 'POST':
537         form = TaskForm_list(task.remd_nrep,request.POST)
538         if form.is_valid():
539              task.remd_multi_t=form.cleaned_data["temperatures"]
540              task.remd_multi_m=form.cleaned_data["multiplexing"]             
541              task.ready=True
542              
543              task.save()
544              if is_lazy_user(request.user):
545               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')              
546              else:
547               return redirect('/')
548     else:
549       if task.unres_ff == 'E0LL2Y':
550         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
551         '["1", "1", "1", "1", "1", "1", "1", "1"]',
552         'temperatures':
553         '["270", "280", "290", "300", "310", "320", "330", "345"]'
554         }
555       else: 
556         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
557         '["1", "1", "1", "1", "1", "1", "1", "1"]',
558         'temperatures':
559         '["250", "260", "270", "280", "290", "300", "315", "330"]'
560         }
561       
562       form = TaskForm_list(task.remd_nrep,initial=data)
563     p_type='replica exchange molecular dynamics - advanced options'
564     return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
565
566 @login_required
567 def details(request,task_id):
568     task = get_object_or_404(Task, id=task_id)
569     return render(request, "details.html",{'task':task})
570
571
572 def details1(request,user_id,task_id):
573     task = get_object_or_404(Task, id=task_id)
574     return render(request, "details1.html",{'task':task})
575
576
577 @login_required
578 def delete(request, task_id):
579     Task.objects.get(id=task_id).delete()
580     return redirect('/')
581
582 def refresh_done1(request, task_id):
583     task = get_object_or_404(Task, id=task_id)
584     user = task.owner
585     refresh_done0(task)
586
587     proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
588     njob=0
589     nq=0
590     for line in proc.stdout:
591       if 'piasek4' in line:
592         if line.split()[1]=='test_server':
593           njob+=1
594           if line.split()[-2]=='Q':
595             nq+=1
596     variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
597
598     return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
599
600
601 @login_required
602 def refresh_done(request):
603     user = request.user
604     tasks = Task.objects.filter(owner=user).order_by('-created_date')
605     alldone = 1
606     for task in tasks:
607       refresh_done0(task)
608       if not task.done:
609          alldone=0
610
611     proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
612     njob=0
613     nq=0
614     for line in proc.stdout:
615       if 'piasek4' in line:
616         if line.split()[1]=='test_server':
617           njob+=1
618           if line.split()[-2]=='Q':
619             nq+=1
620     variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
621
622     if is_lazy_user(request.user):
623      return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
624     else:
625      return render(request, "index.html", {
626                 'tasks': tasks ,
627                 'variable' : variable,
628                 'alldone': alldone
629                         })
630
631       
632 def refresh_done0(task):
633       if os.path.isfile(task.jobdirname+'/finished') and not task.done:
634          task.done=True
635
636          with open(task.jobdirname+'/file.out_GB000', 'r') as f:
637
638            if task.type=='min' or task.type=='md':
639              text=""
640              for line in f:
641                if 'ETOT' in line:
642                   task.etot=line.split()[1]
643
644                if 'RMS deviation' in line:
645                   text=text+line
646                   i=1
647                   for line1 in f:
648                      text=text+line1
649                      i+=1
650                      if i>6:
651                        break
652                if 'Total wall' in line:
653                   text=text+line
654                   
655            elif task.type=='remd':
656              j=0
657              text="Acceptance for replica exchanges and number of exchange attempts\n"
658              for line in f:
659                         
660                if 'ACC' in line:
661                     j+=1
662                     text=text+' '.join(line.split()[2:])+"\n"
663                     if j==task.remd_nrep:
664                        j=1
665                        text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
666
667                if 'Total wall' in line:
668                   text=text+line
669                        
670          task.results_text=text
671
672
673          if task.md_pdbref and task.type=='remd':
674          
675           for i in range(1,6):
676            try:
677             with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
678                  line=f.readline()
679                  if i==1:
680                      task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
681                  elif i==2:
682                      task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
683                  elif i==3:
684                      task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
685                  elif i==4:
686                      task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
687                  elif i==5:
688                      task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
689            except EnvironmentError:
690             print 'file_wham_T*pdb open error'
691           for i in range(1,6):
692             with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
693                text=''
694                for line in f:
695                  if 'RMSD of  the common residues=' in line:
696                    text=' RMSD='+line.split()[5]
697                  if 'TM-score    =' in line:
698                    text=text+' TMscore='+line.split()[2]
699                  if 'GDT-TS-score=' in line:
700                    text=text+' GDT_TS='+line.split()[1]
701                     
702                if i==1:
703                      task.remd_model1=task.remd_model1+text
704                elif i==2:
705                      task.remd_model2=task.remd_model2+text
706                elif i==3:
707                      task.remd_model3=task.remd_model3+text
708                elif i==4:
709                      task.remd_model4=task.remd_model4+text
710                elif i==5:
711                      task.remd_model5=task.remd_model5+text
712
713
714
715          if task.type=='remd':  
716           with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
717
718            for line in f:
719              if 'sumprob' in line:
720                 i=0
721                 for line1 in f:
722                   i+=1
723                   if i>6:
724                        break
725                   if i==1:
726                      task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
727                   elif i==2:
728                      task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
729                   elif i==3:
730                      task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
731                   elif i==4:
732                      task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
733                   elif i==5:
734                      task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
735                      
736          
737
738          task.save()
739       elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
740          if (task.type=='min'):
741            task.running =1
742          else:
743            with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
744               line=''
745               for line in f:
746                 pass
747               if line != '':
748                 last = line.split()[0]
749               else:
750                 last = 0
751            task.running=int(1+int(last)*100.0/task.md_nstep)
752            if task.running>100:
753              task.running=100
754          task.save()
755
756     
757       return