e819090b674e2f133ae6ebaddd7b08e952094935
[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 import random
13
14 res_codes = [
15                 # 20 canonical amino acids
16                 ('CYS', 'C'), ('ASP', 'D'), ('SER', 'S'), ('GLN', 'Q'),
17                 ('LYS', 'K'), ('ILE', 'I'), ('PRO', 'P'), ('THR', 'T'),
18                 ('PHE', 'F'), ('ASN', 'N'), ('GLY', 'G'), ('HIS', 'H'),
19                 ('LEU', 'L'), ('ARG', 'R'), ('TRP', 'W'), ('ALA', 'A'),
20                 ('VAL', 'V'), ('GLU', 'E'), ('TYR', 'Y'), ('MET', 'M'),
21                 ('HSD', 'H'),('HSE', 'H'),('HSP', 'H'),
22                 ('HIE', 'H'), ('HID', 'H'),('HIP', 'H'),
23                 ('CYX', 'C'),
24                 ('DCY', 'c'), ('DAS', 'd'), ('DSN', 's'), ('DGN', 'q'),
25                 ('DLY', 'k'), ('DIL', 'i'), ('DPR', 'p'), ('DTH', 't'),
26                 ('DPN', 'f'), ('DSG', 'n'), ('DHI', 'h'),
27                 ('DLE', 'l'), ('DAR', 'r'), ('DTR', 'w'), ('DAL', 'a'),
28                 ('DVA', 'v'), ('DGL', 'e'), ('DTY', 'y'), ('MED', 'm'),                
29                ]
30
31 three_to_one = dict(res_codes)
32
33 def dock_box(file):
34    import math
35    coord = list()
36    for line in file:
37             if line[0:6] == 'ATOM  ' and line[13:15] == 'CA':
38               x=float(line[30:38])
39               y=float(line[38:46])
40               z=float(line[46:54])
41               coord.append([x, y, z])
42             if line[0:3] == 'END':
43               break
44    maxd=0
45    l=len(coord)
46    for i in xrange(l):
47       for j in xrange(i+1,l):
48         p1=coord[i]
49         p2=coord[j]
50         d=(p1[0]-p2[0])**2 + (p1[1]-p2[1])**2 + (p1[2]-p2[2])**2
51         if d > maxd:
52           maxd=d
53    return math.sqrt(maxd)
54
55
56 def load_pdbid(pdbid,dirname,filename='plik.pdb'):
57     if (not os.path.isdir(dirname)):
58        os.mkdir(dirname)
59     if len(pdbid)==4:
60        file,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
61                      dirname+'/'+filename)     
62     else:
63        chain=pdbid[5]
64        pdbid=pdbid[:4]
65        pdb_tmp=urllib.urlopen('http://files.rcsb.org/download/'+pdbid+'.pdb')
66        with open(dirname+'/'+filename, 'w') as outfile:
67         for line in pdb_tmp:
68           if line[0:6] == 'SSBOND' and line[15] == chain and line[29] == chain:
69             outfile.write(line)
70           if line[0:6] == 'ATOM  ' and line[21] == chain:
71             outfile.write(line)
72           if line[0:6] == 'ENDMDL':
73             break
74        pdb_tmp.close()
75        file=dirname+'/'+filename
76        
77     return(file)
78
79
80 def seq_2d_from_pdb(seq_2d,seq):
81     if seq_2d =='':
82       return(seq_2d)
83     seq_2d=seq_2d.replace('C', '-')
84     seq_2d_tmp=''
85     ii=0
86     for i in range(0,len(seq)):
87       if seq[i]=='X':
88          seq_2d_tmp=seq_2d_tmp+'-'
89       else:
90          if len(seq_2d)>ii:
91             seq_2d_tmp=seq_2d_tmp+seq_2d[ii]
92             ii+=1
93     tmp=''
94     for i in range(0,len(seq_2d_tmp),40):
95       tmp=tmp+seq_2d_tmp[i:i+40]+" "
96     return(tmp)
97
98 def seq_2d_add_x(seq_2d,seq,seq_form):
99     if seq_2d =='':
100       return(seq_2d)
101     seq_2d=seq_2d[:len(seq_form)]
102     seq_2d=seq_2d.replace('C', '-')
103     if seq_form[0] !='X' and seq[0] == 'X':
104       seq_2d='-'+seq_2d
105     if seq_form[-1] !='X' and seq[-1] == 'X':
106       seq_2d=seq_2d+'-'
107     seq_2d=seq_2d[:len(seq)]
108     tmp=''
109     for i in range(0,len(seq_2d),40):
110       tmp=tmp+seq_2d[i:i+40]+" "
111     return(tmp)
112
113 def seq_add_x(sequence):
114     if sequence[0] != 'G' and sequence[0] != 'g' and sequence[0] != 'X':
115         sequence='X'+sequence
116     if sequence[-1] != 'G' and sequence[-1] != 'g' and sequence[-1] != 'X':
117         sequence=sequence+'X'
118     set ='CDSQKIPTFNGHLRWAVEYMXcdsqkiptfnhlrwaveym'
119     sequence = ''.join([c for c in sequence if c in set])
120
121     return(sequence)    
122
123 def from_pdb(file):
124     sequence = []
125     ssbond = []
126     ssbond_ch = []
127     ires = []
128     chain_start = {}
129     chain_end = {}
130     unres_shift = {}
131     chain_sorted=[]
132     newchain = True
133     i=''
134     for line in file:
135             if line[0:6] == 'ATOM  ' and line[13:15] == 'CA':
136               aa = three_to_one.get(line[17:20])
137               i = int(line[22:26])
138               ch = line[21:22]
139               if newchain or i!=ires[-1]:
140                 sequence.append(aa)
141                 ires.append(i)
142                 if newchain:
143                  chain_start[ch]=i
144                  chain_sorted.extend(ch)
145                  newchain = False
146             if line[0:3] == 'TER' and i != '':
147               sequence.append('XX')
148               chain_end[ch]=i
149               newchain = True
150             if line[0:6] == 'SSBOND':
151               b=[]
152               b.append(int(line[17:21]))
153               b.append(int(line[31:35]))
154               ssbond.append(b)
155               c = []
156               c.append((line[15:16]))
157               c.append((line[29:30]))
158               ssbond_ch.append(c)                                                                      
159             if line[0:3] == 'END':
160               break
161     if not sequence[-1] == 'XX':
162             chain_end[ch]=i
163     while sequence[-1] == 'XX':
164             del sequence[-1]
165     if sequence[0] != 'G':
166             sequence.insert(0,'X')
167             ssbond=[ [e[0]+1,e[1]+1] for e in ssbond]
168     if sequence[-1] != 'G':
169             sequence.append('X')
170     seq=''.join(sequence)
171 #    if ires[0] != 1:
172 #            ssbond=[ [e[0]-ires[0]+1,e[1]-ires[0]+1] for e in ssbond]
173     i=0
174     for c in chain_sorted:
175       unres_shift[c]=i+chain_start[c]
176       i=i-(chain_end[c]-chain_start[c])-3
177     ssbond=[ [e[0]-unres_shift[c[0]]+1,e[1]-unres_shift[c[1]]+1] for e,c in zip(ssbond,ssbond_ch)]     
178
179     return seq,json.dumps(ssbond)
180
181
182 @login_required
183 def index(request):
184     user = request.user
185     tasks = Task.objects.filter(owner=user).order_by('-created_date')
186     variable = ''
187     tasks_count = Task.objects.filter(owner=user).count()
188     return render(request, "index.html", {
189             'tasks': tasks, 'alldone': 0, 'tasks_count':tasks_count
190         })
191
192 @login_required
193 def add(request):
194     if request.method == 'POST':
195         form = TaskForm(request.POST)
196         if form.is_valid():
197             name = form.cleaned_data["name"]
198             user = request.user
199             task = Task(name=name,owner=user,ready=False)
200             task.save()
201             return redirect('add_min',task_id=task.id)
202     return redirect('/')
203
204 @login_required
205 def add_min(request,task_id):
206     task = get_object_or_404(Task, id=task_id)
207     if request.method == 'POST':
208      if '_example' in request.POST:
209         data= {'name':task.name,'pdbid':'1BDD'}
210         form = TaskForm_min(initial=data)     
211      else:
212         form = TaskForm_min(request.POST,request.FILES)
213         if form.is_valid():
214              task.name=form.cleaned_data["name"]
215              task.type="min"
216              pdbid=form.cleaned_data["pdbid"]
217
218              basename = str(task.owner)
219              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
220              task.jobdirname = "_".join([basename, suffix])
221
222              if pdbid:
223               task.myfile1=load_pdbid(pdbid,task.jobdirname)
224               task.pdbcode=pdbid
225              else:
226               task.myfile1=form.cleaned_data["file1"]
227
228              seq,task.ssbond=from_pdb(task.myfile1)
229              task.md_seq=""
230              for i in range(0,len(seq),40):
231                     task.md_seq=task.md_seq+seq[i:i+40]+" "
232
233              task.ready=True
234              
235              task.save()
236              if is_lazy_user(request.user):
237               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')              
238              else:
239               return redirect('/')
240     else:
241         data= {'name':task.name}
242         form = TaskForm_min(initial=data)
243     p_type='minimization'
244     basic_adv=True    
245     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
246
247 @login_required
248 def add_min_a(request,task_id):
249     task = get_object_or_404(Task, id=task_id)
250     if request.method == 'POST':
251      if '_example' in request.POST:
252         data= {'name':task.name,'pdbid':'1EI0','unres_ff':'opt-wtfsa-2'}
253         form = TaskForm_min_a(initial=data)     
254      else:
255         form = TaskForm_min_a(request.POST,request.FILES)
256         if form.is_valid():
257              task.name=form.cleaned_data["name"]
258              task.type="min"
259 #             task.min_choice=form.cleaned_data["min_choice"]
260              task.min_overlap=form.cleaned_data["min_overlap"]
261              task.min_searchsc=form.cleaned_data["min_searchsc"]
262              task.min_maxmin=form.cleaned_data["min_maxmin"]
263              task.min_maxfun=form.cleaned_data["min_maxfun"]
264              task.min_pdbout=form.cleaned_data["min_pdbout"]
265
266              basename = str(task.owner)
267              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
268              task.jobdirname = "_".join([basename, suffix])
269              
270              pdbid=form.cleaned_data["pdbid"]
271              if pdbid:
272               task.myfile1=load_pdbid(pdbid,task.jobdirname)
273               task.pdbcode=pdbid
274              else:
275               task.myfile1=form.cleaned_data["file1"]
276
277              task.min_unres_pdb=form.cleaned_data["min_unres_pdb"]
278              task.unres_ff=form.cleaned_data["unres_ff"]
279              task.boxx=form.cleaned_data["boxx"]
280              task.boxy=form.cleaned_data["boxy"]             
281              task.boxz=form.cleaned_data["boxz"]             
282
283              seq,task.ssbond=from_pdb(task.myfile1)
284              task.md_seq=""
285              for i in range(0,len(seq),40):
286                 task.md_seq=task.md_seq+seq[i:i+40]+" "
287                                                            
288              task.ready=True
289              
290              task.save()
291              if is_lazy_user(request.user):
292               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')             
293              else:
294               return redirect('/')
295     else:
296         data= {'name':task.name}
297         form = TaskForm_min_a(initial=data)
298     basic_adv=False
299     p_type='minimization - advanced options'
300     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
301
302 @login_required
303 def add_md(request,task_id):
304     task = get_object_or_404(Task, id=task_id)
305     if request.method == 'POST':
306      if '_example' in request.POST:
307         data= {'name':task.name,'pdbid':'1IGD','md_start':'pdbstart',
308         'md_pdbref':True,'md_temp':200,'md_seed':-39912345}
309         form = TaskForm_md(initial=data)     
310      else:
311         form = TaskForm_md(request.POST,request.FILES)
312         if form.is_valid():
313              task.name=form.cleaned_data["name"]
314              task.type="md"
315              task.md_seed=form.cleaned_data["md_seed"]
316              task.md_start=form.cleaned_data["md_start"]
317              task.md_temp=form.cleaned_data["md_temp"]
318              task.md_nstep=form.cleaned_data["md_nstep"]
319              task.md_total_steps=task.md_nstep
320              if task.md_nstep<250000:
321                  task.md_ntwx=100
322
323              basename = str(task.owner)
324              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
325              task.jobdirname = "_".join([basename, suffix])
326
327              pdbid=form.cleaned_data["pdbid"]
328              if pdbid:
329               task.myfile1=load_pdbid(pdbid,task.jobdirname)
330               task.pdbcode=pdbid
331              else:
332               task.myfile1=form.cleaned_data["file1"]
333              task.md_pdbref=form.cleaned_data["md_pdbref"]             
334
335              task.md_seq=""
336              if task.md_start == "pdbstart" or task.md_pdbref:
337                seq,task.ssbond=from_pdb(task.myfile1)
338              else:
339                seq=seq_add_x(form.cleaned_data["md_seq"])
340                        
341              for i in range(0,len(seq),40):
342                 task.md_seq=task.md_seq+seq[i:i+40]+" "
343              
344              if task.md_start != "pdbstart":
345                 task.ssbond=''
346
347              if any(c.islower() for c in seq):
348               task.md_respa=False
349               task.damino=True
350
351              task.ready=True
352              
353              task.save()
354              if is_lazy_user(request.user):
355               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
356              else:
357               return redirect('/')
358     else:
359         data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
360         form = TaskForm_md(initial=data)
361     basic_adv=True
362     p_type='molecular dynamics'
363     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
364
365 @login_required
366 def add_md_a(request,task_id):
367     task = get_object_or_404(Task, id=task_id)
368     if request.method == 'POST':
369      if '_example' in request.POST:
370         data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf',
371          'md_pdbref':True,'md_mdpdb':True,'md_seed':-39912345}
372         form = TaskForm_md_a(initial=data)     
373      else:
374         form = TaskForm_md_a(request.POST,request.FILES)
375         if form.is_valid():
376              task.name=form.cleaned_data["name"]
377              task.type="md"
378
379              basename = str(task.owner)
380              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
381              task.jobdirname = "_".join([basename, suffix])
382
383              pdbid=form.cleaned_data["pdbid"]
384              if pdbid:
385               task.myfile1=load_pdbid(pdbid,task.jobdirname)
386               task.pdbcode=pdbid
387              else:
388               task.myfile1=form.cleaned_data["file1"]
389              task.md_start=form.cleaned_data["md_start"]
390              task.md_pdbref=form.cleaned_data["md_pdbref"]             
391
392              task.md_seq=""
393              if task.md_start == "pdbstart" or task.md_pdbref:
394                seq,task.ssbond=from_pdb(task.myfile1)
395                task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
396              else:
397                seq=seq_add_x(form.cleaned_data["md_seq"])
398                task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])               
399
400              for i in range(0,len(seq),40):
401                 task.md_seq=task.md_seq+seq[i:i+40]+" "
402
403              if task.md_start != "pdbstart":
404                 task.ssbond=''
405
406              task.md_seed=form.cleaned_data["md_seed"]
407
408              task.md_temp=form.cleaned_data["md_temp"]
409              task.md_nstep=form.cleaned_data["md_nstep"]
410              task.md_total_steps=task.md_nstep
411              task.md_ntwe=form.cleaned_data["md_ntwe"]
412              task.md_ntwx=form.cleaned_data["md_ntwx"]
413              task.md_dt=form.cleaned_data["md_dt"]
414              task.md_lang=form.cleaned_data["md_lang"]
415              task.md_tau=form.cleaned_data["md_tau"]
416              task.md_scal_fric=form.cleaned_data["md_scal_fric"]
417              task.md_mdpdb=form.cleaned_data["md_mdpdb"]
418              task.unres_ff=form.cleaned_data["unres_ff"]
419              task.md_respa=form.cleaned_data["md_respa"]             
420              if any(c.islower() for c in seq):
421               task.md_respa=False
422               task.damino=True
423              task.boxx=form.cleaned_data["boxx"]
424              task.boxy=form.cleaned_data["boxy"]             
425              task.boxz=form.cleaned_data["boxz"]             
426
427              
428              task.ready=True
429              
430              task.save()
431              if is_lazy_user(request.user):
432               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')             
433              else:
434               return redirect('/')
435     else:
436         data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
437         form = TaskForm_md_a(initial=data)
438     basic_adv=False
439     p_type='molecular dynamics - advanced options'
440     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
441
442 @login_required
443 def add_remd(request,task_id):
444     task = get_object_or_404(Task, id=task_id)
445     if request.method == 'POST':
446      if '_example' in request.POST:
447         data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
448         form = TaskForm_remd(initial=data)     
449      else:
450         form = TaskForm_remd(request.POST,request.FILES)
451         if form.is_valid():
452              task.name=form.cleaned_data["name"]
453              task.type="remd"
454              task.md_start=form.cleaned_data["md_start"]
455
456              basename = str(task.owner)
457              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
458              task.jobdirname = "_".join([basename, suffix])
459
460              pdbid=form.cleaned_data["pdbid"]
461              if pdbid:
462               task.myfile1=load_pdbid(pdbid,task.jobdirname)
463               task.pdbcode=pdbid
464              else:
465               task.myfile1=form.cleaned_data["file1"]
466              task.md_pdbref=form.cleaned_data["md_pdbref"]
467              task.md_ntwx=task.remd_nstex 
468
469              task.md_seq=""
470              if task.md_start == "pdbstart" or task.md_pdbref:
471                seq,task.ssbond=from_pdb(task.myfile1)
472              else:
473                seq=seq_add_x(form.cleaned_data["md_seq"])
474              for i in range(0,len(seq),40):
475                 task.md_seq=task.md_seq+seq[i:i+40]+" "
476
477              if task.md_start != "pdbstart":
478                 task.ssbond=''
479
480              task.md_seed=form.cleaned_data["md_seed"]
481
482              task.md_nstep=form.cleaned_data["md_nstep"]
483              task.md_total_steps=task.md_nstep
484
485              if any(c.islower() for c in seq):
486               task.md_respa=False
487               task.damino=True
488
489
490              task.ready=True
491              
492              
493              task.save()
494              if is_lazy_user(request.user):
495               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')             
496              else:
497               return redirect('/')
498     else:
499         data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
500         form = TaskForm_remd(initial=data)
501     basic_adv=True
502     p_type='replica exchange molecular dynamics'
503     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
504
505 @login_required
506 def add_remd_a(request,task_id):
507     from django.core.files.uploadedfile import UploadedFile
508     task = get_object_or_404(Task, id=task_id)
509     if request.method == 'POST':
510      if '_example' in request.POST:
511         data= {'name':task.name,'pdbid':'5G3Q:B','md_pdbref':True,
512          'md_nstep':2000000,'md_lang':'berendsen','unres_ff':'FF2','md_seed':-39912345,
513          'remd_cluter_temp':290,'md_2d':'--EEEEEEE------EEEEEE------EEEEEE------HHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHH---'}
514         form = TaskForm_remd_a(initial=data)    
515         task.example='casp12'
516         task.save() 
517      elif '_example_saxs' in request.POST:
518         data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True,
519          'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
520          'remd_cluter_temp':270, 
521          'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
522 """ 0.5     1.33868e-02
523  1.5     1.95880e-02
524  2.5     2.68896e-02
525  3.5     3.43737e-02
526  4.5     4.07099e-02
527  5.5     4.47875e-02
528  6.5     4.63486e-02
529  7.5     4.60514e-02
530  8.5     4.49130e-02
531  9.5     4.36744e-02
532 10.5     4.26085e-02
533 11.5     4.17464e-02
534 12.5     4.11217e-02
535 13.5     4.07835e-02
536 14.5     4.06776e-02
537 15.5     4.06060e-02
538 16.5     4.03241e-02
539 17.5     3.96655e-02
540 18.5     3.85756e-02
541 19.5     3.70537e-02
542 20.5     3.50982e-02
543 21.5     3.27236e-02
544 22.5     3.00046e-02
545 23.5     2.70643e-02
546 24.5     2.40044e-02
547 25.5     2.08595e-02
548 26.5     1.76342e-02
549 27.5     1.43802e-02
550 28.5     1.12281e-02
551 29.5     8.34574e-03
552 30.5     5.87354e-03
553 31.5     3.88732e-03
554 32.5     2.39755e-03
555 33.5     1.36323e-03
556 34.5     7.06686e-04
557 35.5     3.30592e-04
558 36.5     1.38359e-04"""}
559         form = TaskForm_remd_a(initial=data)     
560      elif '_example_saxs1' in request.POST:
561         data= {'name':task.name,'pdbid':'2KMS','md_pdbref':True,'md_start':'pdbstart',
562         'md_2d':'----EEEEEE-EEEEE-------EEEEEEEEE--EEEEEE-EEEE---EEEEEEEEE-----EEEEEEE-EEE-HHHHH-EEEE-EEEEEEEEE----EEEEEE---EEE-----',
563          'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
564          'remd_cluter_temp':280, 'min_maxfun':50,
565          'scal_rad':5.0,'wsaxs':1000.0,'saxs_data':
566 """0.7100E-00 0.2036E-03
567 0.1420E+01 0.4221E-03
568 0.2130E+01 0.6548E-03
569 0.2840E+01 0.9001E-03
570 0.3550E+01 0.1156E-02
571 0.4260E+01 0.1421E-02
572 0.4970E+01 0.1692E-02
573 0.5680E+01 0.1965E-02
574 0.6390E+01 0.2239E-02
575 0.7100E+01 0.2509E-02
576 0.7810E+01 0.2772E-02
577 0.8520E+01 0.3025E-02
578 0.9230E+01 0.3265E-02
579 0.9940E+01 0.3489E-02
580 0.1065E+02 0.3694E-02
581 0.1136E+02 0.3878E-02
582 0.1207E+02 0.4039E-02
583 0.1278E+02 0.4177E-02
584 0.1349E+02 0.4289E-02
585 0.1420E+02 0.4377E-02
586 0.1491E+02 0.4439E-02
587 0.1562E+02 0.4478E-02
588 0.1633E+02 0.4493E-02
589 0.1704E+02 0.4487E-02
590 0.1775E+02 0.4461E-02
591 0.1846E+02 0.4418E-02
592 0.1917E+02 0.4361E-02
593 0.1988E+02 0.4291E-02
594 0.2059E+02 0.4211E-02
595 0.2130E+02 0.4125E-02
596 0.2201E+02 0.4034E-02
597 0.2272E+02 0.3942E-02
598 0.2343E+02 0.3850E-02
599 0.2414E+02 0.3761E-02
600 0.2485E+02 0.3677E-02
601 0.2556E+02 0.3598E-02
602 0.2627E+02 0.3526E-02
603 0.2698E+02 0.3462E-02
604 0.2769E+02 0.3405E-02
605 0.2840E+02 0.3356E-02
606 0.2911E+02 0.3315E-02
607 0.2982E+02 0.3280E-02
608 0.3053E+02 0.3251E-02
609 0.3124E+02 0.3226E-02
610 0.3195E+02 0.3205E-02
611 0.3266E+02 0.3186E-02
612 0.3337E+02 0.3167E-02
613 0.3408E+02 0.3147E-02
614 0.3479E+02 0.3125E-02
615 0.3550E+02 0.3099E-02
616 0.3621E+02 0.3068E-02
617 0.3692E+02 0.3031E-02
618 0.3763E+02 0.2987E-02
619 0.3834E+02 0.2937E-02
620 0.3905E+02 0.2878E-02
621 0.3976E+02 0.2812E-02
622 0.4047E+02 0.2739E-02
623 0.4118E+02 0.2658E-02
624 0.4189E+02 0.2571E-02
625 0.4260E+02 0.2478E-02
626 0.4331E+02 0.2381E-02
627 0.4402E+02 0.2279E-02
628 0.4473E+02 0.2174E-02
629 0.4544E+02 0.2068E-02
630 0.4615E+02 0.1960E-02
631 0.4686E+02 0.1853E-02
632 0.4757E+02 0.1748E-02
633 0.4828E+02 0.1644E-02
634 0.4899E+02 0.1544E-02
635 0.4970E+02 0.1447E-02
636 0.5041E+02 0.1355E-02
637 0.5112E+02 0.1267E-02
638 0.5183E+02 0.1184E-02
639 0.5254E+02 0.1106E-02
640 0.5325E+02 0.1033E-02
641 0.5396E+02 0.9646E-03
642 0.5467E+02 0.9008E-03
643 0.5538E+02 0.8411E-03
644 0.5609E+02 0.7852E-03
645 0.5680E+02 0.7327E-03
646 0.5751E+02 0.6831E-03
647 0.5822E+02 0.6360E-03
648 0.5893E+02 0.5909E-03
649 0.5964E+02 0.5475E-03
650 0.6035E+02 0.5055E-03
651 0.6106E+02 0.4646E-03
652 0.6177E+02 0.4245E-03
653 0.6248E+02 0.3853E-03
654 0.6319E+02 0.3467E-03
655 0.6390E+02 0.3089E-03
656 0.6461E+02 0.2719E-03
657 0.6532E+02 0.2357E-03
658 0.6603E+02 0.2007E-03
659 0.6674E+02 0.1669E-03
660 0.6745E+02 0.1345E-03
661 0.6816E+02 0.1038E-03
662 0.6887E+02 0.7482E-04
663 0.6958E+02 0.4782E-04
664 0.7029E+02 0.2286E-04"""}
665         form = TaskForm_remd_a(initial=data)     
666      else:
667         form = TaskForm_remd_a(request.POST,request.FILES)
668         if form.is_valid():
669              task.name=form.cleaned_data["name"]
670              task.type="remd"
671
672              basename = str(task.owner)
673              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
674              task.jobdirname = "_".join([basename, suffix])
675
676              pdbid=form.cleaned_data["pdbid"]
677              if pdbid:
678               task.myfile1=load_pdbid(pdbid,task.jobdirname)
679               task.pdbcode=pdbid
680              else:
681               task.myfile1=form.cleaned_data["file1"]
682              task.md_start=form.cleaned_data["md_start"]  
683              task.md_pdbref=form.cleaned_data["md_pdbref"]                        
684
685              task.md_seq=""
686              if task.md_start == "pdbstart" or task.md_pdbref:
687                seq,task.ssbond=from_pdb(task.myfile1)
688                task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
689              else:
690                seq=seq_add_x(form.cleaned_data["md_seq"])
691                task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])               
692
693              for i in range(0,len(seq),40):
694                 task.md_seq=task.md_seq+seq[i:i+40]+" "
695
696              if task.md_start != "pdbstart":
697                 task.ssbond=''
698
699              task.md_seed=form.cleaned_data["md_seed"]
700              task.md_nstep=form.cleaned_data["md_nstep"]
701              task.md_total_steps=task.md_nstep
702              task.md_dt=form.cleaned_data["md_dt"]
703              task.md_lang=form.cleaned_data["md_lang"]
704              task.md_tau=form.cleaned_data["md_tau"]
705              task.md_scal_fric=form.cleaned_data["md_scal_fric"]
706              task.min_maxfun=form.cleaned_data["min_maxfun"]
707              task.remd_nrep=form.cleaned_data["remd_nrep"]
708              task.remd_nstex=form.cleaned_data["remd_nstex"]
709              task.md_ntwx=form.cleaned_data["md_ntwx"]             
710              task.md_ntwe=form.cleaned_data["md_ntwe"]
711              task.md_respa=form.cleaned_data["md_respa"]
712              if any(c.islower() for c in seq):
713               task.md_respa=False
714               task.damino=True
715              
716 #             task.remd_traj1file=form.cleaned_data["remd_traj1file"]
717 #             task.remd_rest1file=form.cleaned_data["remd_rest1file"]
718
719              task.boxx=form.cleaned_data["boxx"]
720              task.boxy=form.cleaned_data["boxy"]             
721              task.boxz=form.cleaned_data["boxz"]             
722
723              task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
724              task.unres_ff=form.cleaned_data["unres_ff"]
725              
726              task.scal_rad = form.cleaned_data["scal_rad"]
727              task.saxs_data = form.cleaned_data["saxs_data"]
728              task.wsaxs = form.cleaned_data["wsaxs"]
729              
730              task.save()
731              return redirect('addmlist',task_id=task.id)
732     else:
733         data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
734         form = TaskForm_remd_a(initial=data)
735     basic_adv=False
736     p_type='replica exchange molecular dynamics - advanced options'
737     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
738
739 @login_required
740 def add_dock(request,task_id):
741     task = get_object_or_404(Task, id=task_id)
742     if request.method == 'POST':
743      if '_example' in request.POST:
744         data= {'name':task.name,'pdbid':'1BON:A','pdbid2':'1BON:B','md_seed':-12396738,'md_nstep':500000}
745         form = TaskForm_dock(initial=data)     
746      else:
747         form = TaskForm_dock(request.POST,request.FILES)
748         if form.is_valid():
749              task.name=form.cleaned_data["name"]
750              task.type="dock"
751
752              basename = str(task.owner)
753              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
754              task.jobdirname = "_".join([basename, suffix])
755
756              pdbid=form.cleaned_data["pdbid"]
757              if pdbid:
758               task.myfile1=load_pdbid(pdbid,task.jobdirname)
759               task.pdbcode=pdbid
760              else:
761               task.myfile1=form.cleaned_data["file1"]
762
763              pdbid2=form.cleaned_data["pdbid2"]
764              if pdbid2:
765               task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
766               task.pdbcode2=pdbid2
767               seq2,ssbond2=from_pdb(task.myfile2)
768              else:
769               task.myfile2=form.cleaned_data["file2"]
770               if not task.myfile2:
771                 seq2=seq_add_x(form.cleaned_data["md_seq"])
772                 task.md_seq2=seq2
773               else:
774                 seq2,ssbond2=from_pdb(task.myfile2)
775
776              task.md_ntwx=task.remd_nstex 
777              task.md_start="pdbstart"
778              task.remd_multi_m='["3", "3", "3", "3", "3", "3", "3", "3"]'
779              if task.md_seq2 =='':  
780                task.md_pdbref=True
781              task.md_respa=False
782              task.ssbond=""
783              task.dock_peptide=form.cleaned_data["dock_peptide"]
784
785              task.md_seq=""
786
787              seq1,ssbond1=from_pdb(task.myfile1)
788
789              
790              if seq1[-1]=='X' and seq2[0]=='X':
791               seq=seq1+seq2
792              elif seq1[-1]!='X' and seq2[0]!='X':
793               seq=seq1+'XX'+seq2
794              else:
795               seq=seq1+'X'+seq2
796              
797              for i in range(0,len(seq),40):
798                 task.md_seq=task.md_seq+seq[i:i+40]+" "
799
800              task.md_seed=form.cleaned_data["md_seed"]
801
802              task.md_nstep=form.cleaned_data["md_nstep"]
803              task.md_total_steps=task.md_nstep
804
805              if any(c.islower() for c in seq):
806               task.md_respa=False
807               task.damino=True
808
809              box1=dock_box(task.myfile1)
810              if task.myfile2:
811               box2=dock_box(task.myfile2)
812              else:
813               box2=len(task.md_seq2)*2.0
814              task.boxx=(box1+box2)*1.2+20
815              task.boxy=(box1+box2)*1.2+20
816              task.boxz=(box1+box2)*1.2+20
817              
818              task.ready=True
819
820              
821              
822              task.save()
823              if is_lazy_user(request.user):
824               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')             
825              else:
826               return redirect('/')
827     else:
828         data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
829         form = TaskForm_dock(initial=data)
830     basic_adv=True
831     p_type='docking'
832     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
833
834 @login_required
835 def add_dock_a(request,task_id):
836     task = get_object_or_404(Task, id=task_id)
837     if request.method == 'POST':
838      if '_example' in request.POST:
839         data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
840         form = TaskForm_dock_a(initial=data)     
841      else:
842         form = TaskForm_dock_a(request.POST,request.FILES)
843         if form.is_valid():
844              task.name=form.cleaned_data["name"]
845              task.type="dock"
846
847              basename = str(task.owner)
848              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
849              task.jobdirname = "_".join([basename, suffix])
850
851              pdbid=form.cleaned_data["pdbid"]
852              if pdbid:
853               task.myfile1=load_pdbid(pdbid,task.jobdirname)
854               task.pdbcode=pdbid
855              else:
856               task.myfile1=form.cleaned_data["file1"]
857               
858              pdbid2=form.cleaned_data["pdbid2"]
859              if pdbid2:
860               task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
861               task.pdbcode2=pdbid2
862              else:
863               task.myfile2=form.cleaned_data["file2"]
864               if not task.myfile2:
865                 seq2=seq_add_x(form.cleaned_data["md_seq"])
866                 task.md_seq2=seq2
867               else:
868                 seq2,ssbond2=from_pdb(task.myfile2)
869               
870
871              task.md_ntwx=task.remd_nstex 
872              task.md_start="pdbstart"
873              if task.md_seq2 =='':
874                task.md_pdbref=True
875              task.md_respa=False
876              task.ssbond=""
877              task.dock_peptide=form.cleaned_data["dock_peptide"]
878               
879              task.md_seq=""
880
881              seq1,ssbond1=from_pdb(task.myfile1)
882              
883              if seq1[-1]=='X' and seq2[0]=='X':
884               seq=seq1+seq2
885              elif seq1[-1]!='X' and seq2[0]!='X':
886               seq=seq1+'XX'+seq2
887              else:
888               seq=seq1+'X'+seq2
889              
890              for i in range(0,len(seq),40):
891                 task.md_seq=task.md_seq+seq[i:i+40]+" "
892
893              task.md_seed=form.cleaned_data["md_seed"]
894
895              task.md_nstep=form.cleaned_data["md_nstep"]
896              task.md_total_steps=task.md_nstep
897              
898              task.md_dt=form.cleaned_data["md_dt"]
899              task.md_lang=form.cleaned_data["md_lang"]
900              task.md_tau=form.cleaned_data["md_tau"]
901              task.md_scal_fric=form.cleaned_data["md_scal_fric"]
902              task.min_maxfun=form.cleaned_data["min_maxfun"]
903              task.remd_nrep=form.cleaned_data["remd_nrep"]
904              task.remd_nstex=form.cleaned_data["remd_nstex"]
905              task.md_ntwx=form.cleaned_data["md_ntwx"]             
906              task.md_ntwe=form.cleaned_data["md_ntwe"]
907
908              task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
909              task.unres_ff=form.cleaned_data["unres_ff"]
910
911              if any(c.islower() for c in seq):
912               task.md_respa=False
913               task.damino=True
914
915              box1=dock_box(task.myfile1)
916              if task.myfile2:
917               box2=dock_box(task.myfile2)
918              else:
919               box2=len(task.md_seq2)*2.0
920              task.boxx=(box1+box2)*1.2+20
921              task.boxy=(box1+box2)*1.2+20
922              task.boxz=(box1+box2)*1.2+20
923
924              task.save()
925              return redirect('addmlist',task_id=task.id)
926
927     else:
928         data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
929         form = TaskForm_dock_a(initial=data)
930     basic_adv=False
931     p_type='docking - advanced options'
932     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
933
934
935
936 @login_required
937 def addmlist(request,task_id):
938     task = get_object_or_404(Task, id=task_id)
939     if request.method == 'POST':
940         form = TaskForm_list(task.remd_nrep,request.POST)
941         if form.is_valid():
942              task.remd_multi_t=form.cleaned_data["temperatures"]
943              task.remd_multi_m=form.cleaned_data["multiplexing"]             
944              task.ready=True
945              
946              task.save()
947              if is_lazy_user(request.user):
948               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')              
949              else:
950               return redirect('/')
951     else:
952       if task.example == 'casp12':
953         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
954         '["2", "2", "2", "2", "2", "2", "2", "2"]',
955         'temperatures':
956         '["270", "280", "290", "300", "310", "320", "330", "340"]'
957         }
958       elif task.unres_ff == 'FF2':
959         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
960         '["1", "1", "1", "1", "1", "1", "1", "1"]',
961         'temperatures':
962         '["270", "280", "290", "300", "310", "320", "330", "345"]'
963         }
964       else: 
965         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
966         '["1", "1", "1", "1", "1", "1", "1", "1"]',
967         'temperatures':
968         '["250", "260", "270", "280", "290", "300", "315", "330"]'
969         }
970       
971       form = TaskForm_list(task.remd_nrep,initial=data)
972     p_type='replica exchange molecular dynamics - advanced options'
973     return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
974
975 @login_required
976 def details(request,task_id):
977     task = get_object_or_404(Task, id=task_id)
978     return render(request, "details.html",{'task':task})
979
980
981 def details1(request,user_id,task_id):
982     task = get_object_or_404(Task, id=task_id)
983     return render(request, "details1.html",{'task':task})
984
985
986 @login_required
987 def delete(request, task_id):
988     Task.objects.get(id=task_id).delete()
989     return redirect('/')
990     
991 @login_required
992 def restart(request, task_id):
993     task = get_object_or_404(Task, id=task_id)
994     restart0(task)
995     return redirect('/')
996    
997 def add_restart_inp():
998     with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
999         for line in f1:
1000           if 'reset_vel=' in line:
1001             f2.write('{:79}'.format('restart'+line[7:]))
1002           else:
1003             f2.write(line)
1004     os.remove('file.inp')
1005     os.rename('file.inp.tmp','file.inp')
1006     return 
1007     
1008 def restart0(task):    
1009     if os.path.isfile(task.jobdirname+'/finished'):    
1010       os.remove(task.jobdirname+'/finished')
1011     task.running =1
1012     task.done=False
1013     task.md_total_steps = task.md_total_steps+task.md_nstep
1014     task.save()
1015     if task.type == 'md':
1016       os.chdir(task.jobdirname)
1017       add_restart_inp()
1018       ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)            
1019       os.chdir('..')
1020     elif task.type == 'remd' or task.type == 'dock':
1021       os.chdir(task.jobdirname)
1022       add_restart_inp()
1023       tmp1=json.loads(task.remd_multi_m)
1024       nreplicas=sum(map(int, tmp1))
1025       with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
1026         for line in f1:
1027           if 'rec_end=' in line:
1028             rec=task.md_total_steps/task.md_ntwx
1029             f2.write('nfile_cx=1 rec_start='+str(rec/10)
1030                +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
1031           elif 'isampl=' in line:
1032             if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
1033                 isampl=1
1034             else:
1035                 isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
1036             f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
1037           else:
1038             f2.write(line)
1039       os.remove('file_wham.inp')
1040       os.rename('file_wham.tmp','file_wham.inp')
1041       if task.type == 'dock':
1042         with open('pbs8.csh','r') as f1, open ('pbs8.tmp','w') as f2:
1043           for line in f1:
1044             if 'generator_v13' in line:
1045               f2.write('#'+line)
1046             else:
1047               f2.write(line)
1048         os.remove('pbs8.csh')
1049         os.rename('pbs8.tmp','pbs8.csh')
1050       ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)            
1051       os.chdir('..')
1052     return
1053
1054 def restart1(request, user_id, task_id):
1055     task = get_object_or_404(Task, id=task_id)
1056     user = task.owner
1057     restart0(task)
1058     return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1059     
1060
1061 def refresh_done1(request, task_id):
1062     task = get_object_or_404(Task, id=task_id)
1063     user = task.owner
1064     refresh_done0(task)
1065
1066     proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1067     njob=0
1068     nq=0
1069     for line in proc.stdout:
1070       if 'piasek4' in line:
1071         if line.split()[1]=='test_server':
1072           njob+=1
1073           if line.split()[-2]=='Q':
1074             nq+=1
1075     variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1076
1077     return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1078
1079
1080 @login_required
1081 def refresh_done(request):
1082     user = request.user
1083     tasks = Task.objects.filter(owner=user).order_by('-created_date')
1084     tasks_count = Task.objects.filter(owner=user).count()
1085     alldone = 1
1086     for task in tasks:
1087       refresh_done0(task)
1088       if not task.done:
1089          alldone=0
1090
1091     proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1092     njob=0
1093     nq=0
1094     for line in proc.stdout:
1095       if 'piasek4' in line:
1096         if line.split()[1]=='test_server':
1097           njob+=1
1098           if line.split()[-2]=='Q':
1099             nq+=1
1100     variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1101
1102     if is_lazy_user(request.user):
1103      return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1104     else:
1105      return render(request, "index.html", {
1106                 'tasks': tasks ,
1107                 'variable' : variable,
1108                 'alldone': alldone,
1109                 'tasks_count':tasks_count
1110                         })
1111
1112       
1113 def refresh_done0(task):
1114       if os.path.isfile(task.jobdirname+'/finished') and not task.done:
1115          task.done=True
1116
1117          with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1118
1119            if task.type=='min' or task.type=='md':
1120              text=""
1121              for line in f:
1122                if 'ETOT' in line:
1123                   task.etot=line.split()[1]
1124
1125                if 'RMS deviation' in line:
1126                   text=text+line
1127                   i=1
1128                   for line1 in f:
1129                      text=text+line1
1130                      i+=1
1131                      if i>6:
1132                        break
1133                if 'Total wall' in line:
1134                   text=text+line
1135                   
1136            elif task.type=='remd' or task.type=='dock':
1137              j=0
1138              text="Acceptance for replica exchanges and number of exchange attempts\n"
1139              for line in f:
1140                         
1141                if 'ACC' in line:
1142                     j+=1
1143                     text=text+' '.join(line.split()[2:])+"\n"
1144                     if j==task.remd_nrep:
1145                        j=1
1146                        text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
1147
1148                if 'Total wall' in line:
1149                   text=text+line
1150                        
1151          task.results_text=text
1152
1153
1154          if task.md_pdbref and task.type=='remd' or task.type=='dock' and task.md_seq2 == '':
1155          
1156           for i in range(1,6):
1157            try:
1158             with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
1159                  line=f.readline()
1160                  if i==1:
1161                      task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
1162                  elif i==2:
1163                      task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
1164                  elif i==3:
1165                      task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
1166                  elif i==4:
1167                      task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
1168                  elif i==5:
1169                      task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
1170            except EnvironmentError:
1171             print 'file_wham_T*pdb open error'
1172           for i in range(1,6):
1173             with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1174                text=''
1175                for line in f:
1176                  if 'RMSD of  the common residues=' in line:
1177                    text=' RMSD='+line.split()[5]
1178                  if 'TM-score    =' in line:
1179                    text=text+' TMscore='+line.split()[2]
1180                  if 'GDT-TS-score=' in line:
1181                    text=text+' GDT_TS='+line.split()[1]
1182                     
1183                if i==1:
1184                      task.remd_model1=task.remd_model1+text
1185                elif i==2:
1186                      task.remd_model2=task.remd_model2+text
1187                elif i==3:
1188                      task.remd_model3=task.remd_model3+text
1189                elif i==4:
1190                      task.remd_model4=task.remd_model4+text
1191                elif i==5:
1192                      task.remd_model5=task.remd_model5+text
1193           
1194           if task.type=='dock':
1195            for i in range(1,6):
1196             with open(task.jobdirname+'/dockq_'+str(i)+'.out', 'r') as f:
1197                text=''
1198                for line in f:
1199                  if 'Fnat' in line:
1200                    text=' Fnat='+line.split()[1]
1201                  if 'iRMS' in line:
1202                    text=text+' iRMS='+line.split()[1]
1203                  if 'LRMS' in line:
1204                    text=text+' LRMS='+line.split()[1]
1205                  if 'CAPRI' in line and not 'DockQ_CAPRI' in line:
1206                    text=text+' CAPRI='+line.split()[1]
1207                  if 'DockQ_CAPRI' in line:
1208                    text=text+' DockQ_CAPRI= '+line.split()[1]
1209                  if 'DockQ ' in line:
1210                    text=text+' DockQ='+line.split()[1]
1211
1212                if i==1:
1213                      task.remd_model1=task.remd_model1+text
1214                elif i==2:
1215                      task.remd_model2=task.remd_model2+text
1216                elif i==3:
1217                      task.remd_model3=task.remd_model3+text
1218                elif i==4:
1219                      task.remd_model4=task.remd_model4+text
1220                elif i==5:
1221                      task.remd_model5=task.remd_model5+text
1222
1223
1224          if task.type=='remd' or task.type=='dock':  
1225           with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1226
1227            for line in f:
1228              if 'sumprob' in line:
1229                 i=0
1230                 for line1 in f:
1231                   i+=1
1232                   if i>6:
1233                        break
1234                   if i==1:
1235                      task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[-2]
1236                   elif i==2:
1237                      task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[-2]
1238                   elif i==3:
1239                      task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[-2]
1240                   elif i==4:
1241                      task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[-2]
1242                   elif i==5:
1243                      task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[-2]
1244                      
1245          
1246
1247          task.save()
1248       elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1249          if (task.type=='min'):
1250            task.running =1
1251            with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1252               line=''
1253               for line in f:
1254                 pass
1255               if line != '':
1256                 last = line.split()[0]
1257               else:
1258                 last = 0
1259            try:
1260               task.running=int(1+int(last)*100.0/task.min_maxmin)
1261            except:
1262               pass
1263            if task.running>100:
1264               task.running=100
1265          else:
1266            with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1267               line=''
1268               for line in f:
1269                 pass
1270               if line != '':
1271                 last = line.split()[0]
1272               else:
1273                 last = 0
1274            task.running=int(1+int(last)*100.0/task.md_nstep)
1275            if task.running>100:
1276              task.running=100
1277          task.save()
1278
1279     
1280       return  
1281
1282 @login_required
1283 def zip_all_files(request, task_id):
1284     import os, zipfile
1285     from django.http import HttpResponse
1286     from wsgiref.util import FileWrapper
1287     from django.core.files.temp import NamedTemporaryFile
1288
1289     task = get_object_or_404(Task, id=task_id)
1290
1291     temp=NamedTemporaryFile()
1292     archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
1293     for (dirpath, dirnames, filenames) in os.walk(task.jobdirname):
1294        for file1 in filenames:
1295          archive.write(dirpath+"/"+file1,file1)
1296     archive.close()
1297     temp.seek(0)
1298     wrapper = FileWrapper(temp)
1299     response = HttpResponse(wrapper, content_type='application/zip')
1300     response['Content-Disposition'] = 'attachment; filename=all.zip'
1301     return response