dock adv correction seq2
[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              task.md_pdbref=True
874              task.md_respa=False
875              task.ssbond=""
876              task.dock_peptide=form.cleaned_data["dock_peptide"]
877               
878              task.md_seq=""
879
880              seq1,ssbond1=from_pdb(task.myfile1)
881              
882              if seq1[-1]=='X' and seq2[0]=='X':
883               seq=seq1+seq2
884              elif seq1[-1]!='X' and seq2[0]!='X':
885               seq=seq1+'XX'+seq2
886              else:
887               seq=seq1+'X'+seq2
888              
889              for i in range(0,len(seq),40):
890                 task.md_seq=task.md_seq+seq[i:i+40]+" "
891
892              task.md_seed=form.cleaned_data["md_seed"]
893
894              task.md_nstep=form.cleaned_data["md_nstep"]
895              task.md_total_steps=task.md_nstep
896              
897              task.md_dt=form.cleaned_data["md_dt"]
898              task.md_lang=form.cleaned_data["md_lang"]
899              task.md_tau=form.cleaned_data["md_tau"]
900              task.md_scal_fric=form.cleaned_data["md_scal_fric"]
901              task.min_maxfun=form.cleaned_data["min_maxfun"]
902              task.remd_nrep=form.cleaned_data["remd_nrep"]
903              task.remd_nstex=form.cleaned_data["remd_nstex"]
904              task.md_ntwx=form.cleaned_data["md_ntwx"]             
905              task.md_ntwe=form.cleaned_data["md_ntwe"]
906
907              task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
908              task.unres_ff=form.cleaned_data["unres_ff"]
909
910              if any(c.islower() for c in seq):
911               task.md_respa=False
912               task.damino=True
913
914              box1=dock_box(task.myfile1)
915              if task.myfile2:
916               box2=dock_box(task.myfile2)
917              else:
918               box2=len(task.md_seq2)*2.0
919              task.boxx=(box1+box2)*1.2+20
920              task.boxy=(box1+box2)*1.2+20
921              task.boxz=(box1+box2)*1.2+20
922
923              task.save()
924              return redirect('addmlist',task_id=task.id)
925
926     else:
927         data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
928         form = TaskForm_dock_a(initial=data)
929     basic_adv=False
930     p_type='docking - advanced options'
931     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
932
933
934
935 @login_required
936 def addmlist(request,task_id):
937     task = get_object_or_404(Task, id=task_id)
938     if request.method == 'POST':
939         form = TaskForm_list(task.remd_nrep,request.POST)
940         if form.is_valid():
941              task.remd_multi_t=form.cleaned_data["temperatures"]
942              task.remd_multi_m=form.cleaned_data["multiplexing"]             
943              task.ready=True
944              
945              task.save()
946              if is_lazy_user(request.user):
947               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')              
948              else:
949               return redirect('/')
950     else:
951       if task.example == 'casp12':
952         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
953         '["2", "2", "2", "2", "2", "2", "2", "2"]',
954         'temperatures':
955         '["270", "280", "290", "300", "310", "320", "330", "340"]'
956         }
957       elif task.unres_ff == 'FF2':
958         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
959         '["1", "1", "1", "1", "1", "1", "1", "1"]',
960         'temperatures':
961         '["270", "280", "290", "300", "310", "320", "330", "345"]'
962         }
963       else: 
964         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
965         '["1", "1", "1", "1", "1", "1", "1", "1"]',
966         'temperatures':
967         '["250", "260", "270", "280", "290", "300", "315", "330"]'
968         }
969       
970       form = TaskForm_list(task.remd_nrep,initial=data)
971     p_type='replica exchange molecular dynamics - advanced options'
972     return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
973
974 @login_required
975 def details(request,task_id):
976     task = get_object_or_404(Task, id=task_id)
977     return render(request, "details.html",{'task':task})
978
979
980 def details1(request,user_id,task_id):
981     task = get_object_or_404(Task, id=task_id)
982     return render(request, "details1.html",{'task':task})
983
984
985 @login_required
986 def delete(request, task_id):
987     Task.objects.get(id=task_id).delete()
988     return redirect('/')
989     
990 @login_required
991 def restart(request, task_id):
992     task = get_object_or_404(Task, id=task_id)
993     restart0(task)
994     return redirect('/')
995    
996 def add_restart_inp():
997     with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
998         for line in f1:
999           if 'reset_vel=' in line:
1000             f2.write('{:79}'.format('restart'+line[7:]))
1001           else:
1002             f2.write(line)
1003     os.remove('file.inp')
1004     os.rename('file.inp.tmp','file.inp')
1005     return 
1006     
1007 def restart0(task):    
1008     if os.path.isfile(task.jobdirname+'/finished'):    
1009       os.remove(task.jobdirname+'/finished')
1010     task.running =1
1011     task.done=False
1012     task.md_total_steps = task.md_total_steps+task.md_nstep
1013     task.save()
1014     if task.type == 'md':
1015       os.chdir(task.jobdirname)
1016       add_restart_inp()
1017       ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)            
1018       os.chdir('..')
1019     elif task.type == 'remd':
1020       os.chdir(task.jobdirname)
1021       add_restart_inp()
1022       tmp1=json.loads(task.remd_multi_m)
1023       nreplicas=sum(map(int, tmp1))
1024       with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
1025         for line in f1:
1026           if 'rec_end=' in line:
1027             rec=task.md_total_steps/task.md_ntwx
1028             f2.write('nfile_cx=1 rec_start='+str(rec/10)
1029                +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
1030           elif 'isampl=' in line:
1031             if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
1032                 isampl=1
1033             else:
1034                 isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
1035             f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
1036           else:
1037             f2.write(line)
1038       os.remove('file_wham.inp')
1039       os.rename('file_wham.tmp','file_wham.inp')
1040       ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)            
1041       os.chdir('..')
1042     return
1043
1044 def restart1(request, user_id, task_id):
1045     task = get_object_or_404(Task, id=task_id)
1046     user = task.owner
1047     restart0(task)
1048     return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1049     
1050
1051 def refresh_done1(request, task_id):
1052     task = get_object_or_404(Task, id=task_id)
1053     user = task.owner
1054     refresh_done0(task)
1055
1056     proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1057     njob=0
1058     nq=0
1059     for line in proc.stdout:
1060       if 'piasek4' in line:
1061         if line.split()[1]=='test_server':
1062           njob+=1
1063           if line.split()[-2]=='Q':
1064             nq+=1
1065     variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1066
1067     return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1068
1069
1070 @login_required
1071 def refresh_done(request):
1072     user = request.user
1073     tasks = Task.objects.filter(owner=user).order_by('-created_date')
1074     tasks_count = Task.objects.filter(owner=user).count()
1075     alldone = 1
1076     for task in tasks:
1077       refresh_done0(task)
1078       if not task.done:
1079          alldone=0
1080
1081     proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1082     njob=0
1083     nq=0
1084     for line in proc.stdout:
1085       if 'piasek4' in line:
1086         if line.split()[1]=='test_server':
1087           njob+=1
1088           if line.split()[-2]=='Q':
1089             nq+=1
1090     variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1091
1092     if is_lazy_user(request.user):
1093      return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1094     else:
1095      return render(request, "index.html", {
1096                 'tasks': tasks ,
1097                 'variable' : variable,
1098                 'alldone': alldone,
1099                 'tasks_count':tasks_count
1100                         })
1101
1102       
1103 def refresh_done0(task):
1104       if os.path.isfile(task.jobdirname+'/finished') and not task.done:
1105          task.done=True
1106
1107          with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1108
1109            if task.type=='min' or task.type=='md':
1110              text=""
1111              for line in f:
1112                if 'ETOT' in line:
1113                   task.etot=line.split()[1]
1114
1115                if 'RMS deviation' in line:
1116                   text=text+line
1117                   i=1
1118                   for line1 in f:
1119                      text=text+line1
1120                      i+=1
1121                      if i>6:
1122                        break
1123                if 'Total wall' in line:
1124                   text=text+line
1125                   
1126            elif task.type=='remd' or task.type=='dock':
1127              j=0
1128              text="Acceptance for replica exchanges and number of exchange attempts\n"
1129              for line in f:
1130                         
1131                if 'ACC' in line:
1132                     j+=1
1133                     text=text+' '.join(line.split()[2:])+"\n"
1134                     if j==task.remd_nrep:
1135                        j=1
1136                        text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
1137
1138                if 'Total wall' in line:
1139                   text=text+line
1140                        
1141          task.results_text=text
1142
1143
1144          if task.md_pdbref and task.type=='remd' or task.type=='dock' and task.md_seq2 == '':
1145          
1146           for i in range(1,6):
1147            try:
1148             with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
1149                  line=f.readline()
1150                  if i==1:
1151                      task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
1152                  elif i==2:
1153                      task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
1154                  elif i==3:
1155                      task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
1156                  elif i==4:
1157                      task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
1158                  elif i==5:
1159                      task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
1160            except EnvironmentError:
1161             print 'file_wham_T*pdb open error'
1162           for i in range(1,6):
1163             with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1164                text=''
1165                for line in f:
1166                  if 'RMSD of  the common residues=' in line:
1167                    text=' RMSD='+line.split()[5]
1168                  if 'TM-score    =' in line:
1169                    text=text+' TMscore='+line.split()[2]
1170                  if 'GDT-TS-score=' in line:
1171                    text=text+' GDT_TS='+line.split()[1]
1172                     
1173                if i==1:
1174                      task.remd_model1=task.remd_model1+text
1175                elif i==2:
1176                      task.remd_model2=task.remd_model2+text
1177                elif i==3:
1178                      task.remd_model3=task.remd_model3+text
1179                elif i==4:
1180                      task.remd_model4=task.remd_model4+text
1181                elif i==5:
1182                      task.remd_model5=task.remd_model5+text
1183           
1184           if task.type=='dock':
1185            for i in range(1,6):
1186             with open(task.jobdirname+'/dockq_'+str(i)+'.out', 'r') as f:
1187                text=''
1188                for line in f:
1189                  if 'Fnat' in line:
1190                    text=' Fnat='+line.split()[1]
1191                  if 'iRMS' in line:
1192                    text=text+' iRMS='+line.split()[1]
1193                  if 'LRMS' in line:
1194                    text=text+' LRMS='+line.split()[1]
1195                  if 'CAPRI' in line and not 'DockQ_CAPRI' in line:
1196                    text=text+' CAPRI='+line.split()[1]
1197                  if 'DockQ_CAPRI' in line:
1198                    text=text+' DockQ_CAPRI= '+line.split()[1]
1199                  if 'DockQ ' in line:
1200                    text=text+' DockQ='+line.split()[1]
1201
1202                if i==1:
1203                      task.remd_model1=task.remd_model1+text
1204                elif i==2:
1205                      task.remd_model2=task.remd_model2+text
1206                elif i==3:
1207                      task.remd_model3=task.remd_model3+text
1208                elif i==4:
1209                      task.remd_model4=task.remd_model4+text
1210                elif i==5:
1211                      task.remd_model5=task.remd_model5+text
1212
1213
1214          if task.type=='remd' or task.type=='dock':  
1215           with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1216
1217            for line in f:
1218              if 'sumprob' in line:
1219                 i=0
1220                 for line1 in f:
1221                   i+=1
1222                   if i>6:
1223                        break
1224                   if i==1:
1225                      task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[-2]
1226                   elif i==2:
1227                      task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[-2]
1228                   elif i==3:
1229                      task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[-2]
1230                   elif i==4:
1231                      task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[-2]
1232                   elif i==5:
1233                      task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[-2]
1234                      
1235          
1236
1237          task.save()
1238       elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1239          if (task.type=='min'):
1240            task.running =1
1241            with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1242               line=''
1243               for line in f:
1244                 pass
1245               if line != '':
1246                 last = line.split()[0]
1247               else:
1248                 last = 0
1249            try:
1250               task.running=int(1+int(last)*100.0/task.min_maxmin)
1251            except:
1252               pass
1253            if task.running>100:
1254               task.running=100
1255          else:
1256            with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1257               line=''
1258               for line in f:
1259                 pass
1260               if line != '':
1261                 last = line.split()[0]
1262               else:
1263                 last = 0
1264            task.running=int(1+int(last)*100.0/task.md_nstep)
1265            if task.running>100:
1266              task.running=100
1267          task.save()
1268
1269     
1270       return  
1271
1272 @login_required
1273 def zip_all_files(request, task_id):
1274     import os, zipfile
1275     from django.http import HttpResponse
1276     from wsgiref.util import FileWrapper
1277     from django.core.files.temp import NamedTemporaryFile
1278
1279     task = get_object_or_404(Task, id=task_id)
1280
1281     temp=NamedTemporaryFile()
1282     archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
1283     for (dirpath, dirnames, filenames) in os.walk(task.jobdirname):
1284        for file1 in filenames:
1285          archive.write(dirpath+"/"+file1,file1)
1286     archive.close()
1287     temp.seek(0)
1288     wrapper = FileWrapper(temp)
1289     response = HttpResponse(wrapper, content_type='application/zip')
1290     response['Content-Disposition'] = 'attachment; filename=all.zip'
1291     return response