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