remd preminim maxfun input
[django_unres.git] / django_simple / todo / views.py
1 from django.contrib.auth.decorators import login_required
2 from django.shortcuts import redirect, render, get_object_or_404
3 from django.contrib.auth.models import User
4 from .forms import *
5 from .models import Task
6 import datetime
7 import os
8 import subprocess
9 import json
10 from lazysignup.decorators import allow_lazy_user
11 from lazysignup.utils import is_lazy_user
12
13 res_codes = [
14                 # 20 canonical amino acids
15                 ('CYS', 'C'), ('ASP', 'D'), ('SER', 'S'), ('GLN', 'Q'),
16                 ('LYS', 'K'), ('ILE', 'I'), ('PRO', 'P'), ('THR', 'T'),
17                 ('PHE', 'F'), ('ASN', 'N'), ('GLY', 'G'), ('HIS', 'H'),
18                 ('LEU', 'L'), ('ARG', 'R'), ('TRP', 'W'), ('ALA', 'A'),
19                 ('VAL', 'V'), ('GLU', 'E'), ('TYR', 'Y'), ('MET', 'M'),
20                 ('HSD', 'H'),('HSE', 'H'),('HSP', 'H'),
21                 ('HIE', 'H'), ('HID', 'H'),('HIP', 'H'),
22                 ('CYX', 'C'),
23                 ('DCY', 'c'), ('DAS', 'd'), ('DSN', 's'), ('DGN', 'q'),
24                 ('DLY', 'k'), ('DIL', 'i'), ('DPR', 'p'), ('DTH', 't'),
25                 ('DPN', 'f'), ('DSG', 'n'), ('DHI', 'h'),
26                 ('DLE', 'l'), ('DAR', 'r'), ('DTR', 'w'), ('DAL', 'a'),
27                 ('DVA', 'v'), ('DGL', 'e'), ('DTY', 'y'), ('MED', 'm'),                
28                ]
29
30 three_to_one = dict(res_codes)
31
32 def load_pdbid(pdbid,dirname):
33     os.mkdir(dirname)
34     if len(pdbid)==4:
35        file,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
36                      dirname+'/plik.pdb')     
37     else:
38        chain=pdbid[5]
39        pdbid=pdbid[:4]
40        pdb_tmp=urllib.urlopen('http://files.rcsb.org/download/'+pdbid+'.pdb')
41        with open(dirname+'/plik.pdb', 'w') as outfile:
42         for line in pdb_tmp:
43           if line[0:6] == 'SSBOND' and line[15] == chain and line[29] == chain:
44             outfile.write(line)
45           if line[0:6] == 'ATOM  ' and line[21] == chain:
46             outfile.write(line)
47        pdb_tmp.close()
48        file=dirname+'/plik.pdb'
49        
50     return(file)
51
52
53 def seq_2d_from_pdb(seq_2d,seq):
54     if seq_2d =='':
55       return(seq_2d)
56     seq_2d=seq_2d.replace('C', '-')
57     seq_2d_tmp=''
58     ii=0
59     for i in range(0,len(seq)):
60       if seq[i]=='X':
61          seq_2d_tmp=seq_2d_tmp+'-'
62       else:
63          if len(seq_2d)>ii:
64             seq_2d_tmp=seq_2d_tmp+seq_2d[ii]
65             ii+=1
66     tmp=''
67     for i in range(0,len(seq_2d_tmp),40):
68       tmp=tmp+seq_2d_tmp[i:i+40]+" "
69     return(tmp)
70
71 def seq_2d_add_x(seq_2d,seq,seq_form):
72     if seq_2d =='':
73       return(seq_2d)
74     seq_2d=seq_2d[:len(seq_form)]
75     seq_2d=seq_2d.replace('C', '-')
76     if seq_form[0] !='X' and seq[0] == 'X':
77       seq_2d='-'+seq_2d
78     if seq_form[-1] !='X' and seq[-1] == 'X':
79       seq_2d=seq_2d+'-'
80     seq_2d=seq_2d[:len(seq)]
81     tmp=''
82     for i in range(0,len(seq_2d),40):
83       tmp=tmp+seq_2d[i:i+40]+" "
84     return(tmp)
85
86 def seq_add_x(sequence):
87     if sequence[0] != 'G' and sequence[0] != 'g' and sequence[0] != 'X':
88         sequence='X'+sequence
89     if sequence[-1] != 'G' and sequence[-1] != 'g' and sequence[-1] != 'X':
90         sequence=sequence+'X'
91     set ='CDSQKIPTFNGHLRWAVEYMXcdsqkiptfnhlrwaveym'
92     sequence = ''.join([c for c in sequence if c in set])
93
94     return(sequence)    
95
96 def from_pdb(file):
97     sequence = []
98     ssbond = []
99     ssbond_ch = []
100     ires = []
101     chain_start = {}
102     chain_end = {}
103     unres_shift = {}
104     chain_sorted=[]
105     newchain = True
106     i=''
107     for line in file:
108             if line[0:6] == 'ATOM  ' and line[13:15] == 'CA':
109               aa = three_to_one.get(line[17:20])
110               i = int(line[22:26])
111               ch = line[21:22]
112               if newchain or i!=ires[-1]:
113                 sequence.append(aa)
114                 ires.append(i)
115                 if newchain:
116                  chain_start[ch]=i
117                  chain_sorted.extend(ch)
118                  newchain = False
119             if line[0:3] == 'TER' and i != '':
120               sequence.append('XX')
121               chain_end[ch]=i
122               newchain = True
123             if line[0:6] == 'SSBOND':
124               b=[]
125               b.append(int(line[17:21]))
126               b.append(int(line[31:35]))
127               ssbond.append(b)
128               c = []
129               c.append((line[15:16]))
130               c.append((line[29:30]))
131               ssbond_ch.append(c)                                                                      
132             if line[0:3] == 'END':
133               break
134     if not sequence[-1] == 'XX':
135             chain_end[ch]=i
136     while sequence[-1] == 'XX':
137             del sequence[-1]
138     if sequence[0] != 'G':
139             sequence.insert(0,'X')
140             ssbond=[ [e[0]+1,e[1]+1] for e in ssbond]
141     if sequence[-1] != 'G':
142             sequence.append('X')
143     seq=''.join(sequence)
144 #    if ires[0] != 1:
145 #            ssbond=[ [e[0]-ires[0]+1,e[1]-ires[0]+1] for e in ssbond]
146     i=0
147     for c in chain_sorted:
148       unres_shift[c]=i+chain_start[c]
149       i=i-(chain_end[c]-chain_start[c])-3
150     ssbond=[ [e[0]-unres_shift[c[0]]+1,e[1]-unres_shift[c[1]]+1] for e,c in zip(ssbond,ssbond_ch)]     
151
152     return seq,json.dumps(ssbond)
153
154
155 @login_required
156 def index(request):
157     user = request.user
158     tasks = Task.objects.filter(owner=user).order_by('-created_date')
159     variable = ''
160     return render(request, "index.html", {
161             'tasks': tasks, 'alldone': 0
162         })
163
164 @login_required
165 def add(request):
166     if request.method == 'POST':
167         form = TaskForm(request.POST)
168         if form.is_valid():
169             name = form.cleaned_data["name"]
170             user = request.user
171             task = Task(name=name,owner=user,ready=False)
172             task.save()
173             return redirect('add_min',task_id=task.id)
174     return redirect('/')
175
176 @login_required
177 def add_min(request,task_id):
178     task = get_object_or_404(Task, id=task_id)
179     if request.method == 'POST':
180      if '_example' in request.POST:
181         data= {'name':task.name,'pdbid':'1BDD'}
182         form = TaskForm_min(initial=data)     
183      else:
184         form = TaskForm_min(request.POST,request.FILES)
185         if form.is_valid():
186              task.name=form.cleaned_data["name"]
187              task.type="min"
188              pdbid=form.cleaned_data["pdbid"]
189
190              basename = str(task.owner)
191              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
192              task.jobdirname = "_".join([basename, suffix])
193
194              if pdbid:
195               task.myfile1=load_pdbid(pdbid,task.jobdirname)
196               task.pdbcode=pdbid
197              else:
198               task.myfile1=form.cleaned_data["file1"]
199
200              seq,task.ssbond=from_pdb(task.myfile1)
201              task.md_seq=""
202              for i in range(0,len(seq),40):
203                     task.md_seq=task.md_seq+seq[i:i+40]+" "
204
205              task.ready=True
206              
207              task.save()
208              if is_lazy_user(request.user):
209               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')              
210              else:
211               return redirect('/')
212     else:
213         data= {'name':task.name}
214         form = TaskForm_min(initial=data)
215     p_type='minimization'
216     basic_adv=True    
217     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
218
219 @login_required
220 def add_min_a(request,task_id):
221     task = get_object_or_404(Task, id=task_id)
222     if request.method == 'POST':
223      if '_example' in request.POST:
224         data= {'name':task.name,'pdbid':'1EI0','unres_ff':'opt-wtfsa-2'}
225         form = TaskForm_min_a(initial=data)     
226      else:
227         form = TaskForm_min_a(request.POST,request.FILES)
228         if form.is_valid():
229              task.name=form.cleaned_data["name"]
230              task.type="min"
231 #             task.min_choice=form.cleaned_data["min_choice"]
232              task.min_overlap=form.cleaned_data["min_overlap"]
233              task.min_searchsc=form.cleaned_data["min_searchsc"]
234              task.min_maxmin=form.cleaned_data["min_maxmin"]
235              task.min_maxfun=form.cleaned_data["min_maxfun"]
236              task.min_pdbout=form.cleaned_data["min_pdbout"]
237
238              basename = str(task.owner)
239              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
240              task.jobdirname = "_".join([basename, suffix])
241              
242              pdbid=form.cleaned_data["pdbid"]
243              if pdbid:
244               task.myfile1=load_pdbid(pdbid,task.jobdirname)
245               task.pdbcode=pdbid
246              else:
247               task.myfile1=form.cleaned_data["file1"]
248
249              task.min_unres_pdb=form.cleaned_data["min_unres_pdb"]
250              task.unres_ff=form.cleaned_data["unres_ff"]
251              task.boxx=form.cleaned_data["boxx"]
252              task.boxy=form.cleaned_data["boxy"]             
253              task.boxz=form.cleaned_data["boxz"]             
254
255              seq,task.ssbond=from_pdb(task.myfile1)
256              task.md_seq=""
257              for i in range(0,len(seq),40):
258                 task.md_seq=task.md_seq+seq[i:i+40]+" "
259                                                            
260              task.ready=True
261              
262              task.save()
263              if is_lazy_user(request.user):
264               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')             
265              else:
266               return redirect('/')
267     else:
268         data= {'name':task.name}
269         form = TaskForm_min_a(initial=data)
270     basic_adv=False
271     p_type='minimization - advanced options'
272     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
273
274 @login_required
275 def add_md(request,task_id):
276     task = get_object_or_404(Task, id=task_id)
277     if request.method == 'POST':
278      if '_example' in request.POST:
279         data= {'name':task.name,'pdbid':'1IGD','md_start':'pdbstart',
280         'md_pdbref':True,'md_temp':200}
281         form = TaskForm_md(initial=data)     
282      else:
283         form = TaskForm_md(request.POST,request.FILES)
284         if form.is_valid():
285              task.name=form.cleaned_data["name"]
286              task.type="md"
287              task.md_seed=form.cleaned_data["md_seed"]
288              task.md_start=form.cleaned_data["md_start"]
289              task.md_temp=form.cleaned_data["md_temp"]
290              task.md_nstep=form.cleaned_data["md_nstep"]
291
292              basename = str(task.owner)
293              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
294              task.jobdirname = "_".join([basename, suffix])
295
296              pdbid=form.cleaned_data["pdbid"]
297              if pdbid:
298               task.myfile1=load_pdbid(pdbid,task.jobdirname)
299               task.pdbcode=pdbid
300              else:
301               task.myfile1=form.cleaned_data["file1"]
302              task.md_pdbref=form.cleaned_data["md_pdbref"]             
303
304              task.md_seq=""
305              if task.md_start == "pdbstart" or task.md_pdbref:
306                seq,task.ssbond=from_pdb(task.myfile1)
307              else:
308                seq=seq_add_x(form.cleaned_data["md_seq"])
309                        
310              for i in range(0,len(seq),40):
311                 task.md_seq=task.md_seq+seq[i:i+40]+" "
312              
313              if task.md_start != "pdbstart":
314                 task.ssbond=''
315
316              task.ready=True
317              
318              task.save()
319              if is_lazy_user(request.user):
320               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
321              else:
322               return redirect('/')
323     else:
324         data= {'name':task.name}
325         form = TaskForm_md(initial=data)
326     basic_adv=True
327     p_type='molecular dynamics'
328     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
329
330 @login_required
331 def add_md_a(request,task_id):
332     task = get_object_or_404(Task, id=task_id)
333     if request.method == 'POST':
334      if '_example' in request.POST:
335         data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf',
336          'md_pdbref':True,'md_mdpdb':True}
337         form = TaskForm_md_a(initial=data)     
338      else:
339         form = TaskForm_md_a(request.POST,request.FILES)
340         if form.is_valid():
341              task.name=form.cleaned_data["name"]
342              task.type="md"
343
344              basename = str(task.owner)
345              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
346              task.jobdirname = "_".join([basename, suffix])
347
348              pdbid=form.cleaned_data["pdbid"]
349              if pdbid:
350               task.myfile1=load_pdbid(pdbid,task.jobdirname)
351               task.pdbcode=pdbid
352              else:
353               task.myfile1=form.cleaned_data["file1"]
354              task.md_start=form.cleaned_data["md_start"]
355              task.md_pdbref=form.cleaned_data["md_pdbref"]             
356
357              task.md_seq=""
358              if task.md_start == "pdbstart" or task.md_pdbref:
359                seq,task.ssbond=from_pdb(task.myfile1)
360                task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
361              else:
362                seq=seq_add_x(form.cleaned_data["md_seq"])
363                task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])               
364
365              for i in range(0,len(seq),40):
366                 task.md_seq=task.md_seq+seq[i:i+40]+" "
367
368              if task.md_start != "pdbstart":
369                 task.ssbond=''
370
371              task.md_seed=form.cleaned_data["md_seed"]
372
373              task.md_temp=form.cleaned_data["md_temp"]
374              task.md_nstep=form.cleaned_data["md_nstep"]
375              task.md_ntwe=form.cleaned_data["md_ntwe"]
376              task.md_ntwx=form.cleaned_data["md_ntwx"]
377              task.md_dt=form.cleaned_data["md_dt"]
378              task.md_lang=form.cleaned_data["md_lang"]
379              task.md_tau=form.cleaned_data["md_tau"]
380              task.md_scal_fric=form.cleaned_data["md_scal_fric"]
381              task.md_mdpdb=form.cleaned_data["md_mdpdb"]
382              task.unres_ff=form.cleaned_data["unres_ff"]
383              task.md_respa=form.cleaned_data["md_respa"]             
384              task.boxx=form.cleaned_data["boxx"]
385              task.boxy=form.cleaned_data["boxy"]             
386              task.boxz=form.cleaned_data["boxz"]             
387
388              
389              task.ready=True
390              
391              task.save()
392              if is_lazy_user(request.user):
393               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')             
394              else:
395               return redirect('/')
396     else:
397         data= {'name':task.name}
398         form = TaskForm_md_a(initial=data)
399     basic_adv=False
400     p_type='molecular dynamics - advanced options'
401     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
402
403 @login_required
404 def add_remd(request,task_id):
405     task = get_object_or_404(Task, id=task_id)
406     if request.method == 'POST':
407      if '_example' in request.POST:
408         data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True}
409         form = TaskForm_remd(initial=data)     
410      else:
411         form = TaskForm_remd(request.POST,request.FILES)
412         if form.is_valid():
413              task.name=form.cleaned_data["name"]
414              task.type="remd"
415              task.md_start=form.cleaned_data["md_start"]
416
417              basename = str(task.owner)
418              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
419              task.jobdirname = "_".join([basename, suffix])
420
421              pdbid=form.cleaned_data["pdbid"]
422              if pdbid:
423               task.myfile1=load_pdbid(pdbid,task.jobdirname)
424               task.pdbcode=pdbid
425              else:
426               task.myfile1=form.cleaned_data["file1"]
427              task.md_pdbref=form.cleaned_data["md_pdbref"]
428              task.md_ntwx=task.remd_nstex 
429
430              task.md_seq=""
431              if task.md_start == "pdbstart" or task.md_pdbref:
432                seq,task.ssbond=from_pdb(task.myfile1)
433              else:
434                seq=seq_add_x(form.cleaned_data["md_seq"])
435              for i in range(0,len(seq),40):
436                 task.md_seq=task.md_seq+seq[i:i+40]+" "
437
438              if task.md_start != "pdbstart":
439                 task.ssbond=''
440
441              task.md_seed=form.cleaned_data["md_seed"]
442
443              task.md_nstep=form.cleaned_data["md_nstep"]
444
445
446              task.ready=True
447              
448              
449              task.save()
450              if is_lazy_user(request.user):
451               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')             
452              else:
453               return redirect('/')
454     else:
455         data= {'name':task.name}
456         form = TaskForm_remd(initial=data)
457     basic_adv=True
458     p_type='replica exchange molecular dynamics'
459     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
460
461 @login_required
462 def add_remd_a(request,task_id):
463     from django.core.files.uploadedfile import UploadedFile
464     task = get_object_or_404(Task, id=task_id)
465     if request.method == 'POST':
466      if '_example' in request.POST:
467         data= {'name':task.name,'pdbid':'5G3Q:B','md_pdbref':True,
468          'md_nstep':2000000,'md_lang':'berendsen','unres_ff':'FF2',
469          'remd_cluter_temp':290,'md_2d':'--EEEEEEE------EEEEEE------EEEEEE------HHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHH---'}
470         form = TaskForm_remd_a(initial=data)    
471         task.example='casp12'
472         task.save() 
473      elif '_example_saxs' in request.POST:
474         data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True,
475          'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2',
476          'remd_cluter_temp':270, 
477          'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
478 """ 0.5     1.33868e-02
479  1.5     1.95880e-02
480  2.5     2.68896e-02
481  3.5     3.43737e-02
482  4.5     4.07099e-02
483  5.5     4.47875e-02
484  6.5     4.63486e-02
485  7.5     4.60514e-02
486  8.5     4.49130e-02
487  9.5     4.36744e-02
488 10.5     4.26085e-02
489 11.5     4.17464e-02
490 12.5     4.11217e-02
491 13.5     4.07835e-02
492 14.5     4.06776e-02
493 15.5     4.06060e-02
494 16.5     4.03241e-02
495 17.5     3.96655e-02
496 18.5     3.85756e-02
497 19.5     3.70537e-02
498 20.5     3.50982e-02
499 21.5     3.27236e-02
500 22.5     3.00046e-02
501 23.5     2.70643e-02
502 24.5     2.40044e-02
503 25.5     2.08595e-02
504 26.5     1.76342e-02
505 27.5     1.43802e-02
506 28.5     1.12281e-02
507 29.5     8.34574e-03
508 30.5     5.87354e-03
509 31.5     3.88732e-03
510 32.5     2.39755e-03
511 33.5     1.36323e-03
512 34.5     7.06686e-04
513 35.5     3.30592e-04
514 36.5     1.38359e-04"""}
515         form = TaskForm_remd_a(initial=data)     
516      else:
517         form = TaskForm_remd_a(request.POST,request.FILES)
518         if form.is_valid():
519              task.name=form.cleaned_data["name"]
520              task.type="remd"
521
522              basename = str(task.owner)
523              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
524              task.jobdirname = "_".join([basename, suffix])
525
526              pdbid=form.cleaned_data["pdbid"]
527              if pdbid:
528               task.myfile1=load_pdbid(pdbid,task.jobdirname)
529               task.pdbcode=pdbid
530              else:
531               task.myfile1=form.cleaned_data["file1"]
532              task.md_start=form.cleaned_data["md_start"]  
533              task.md_pdbref=form.cleaned_data["md_pdbref"]                        
534
535              task.md_seq=""
536              if task.md_start == "pdbstart" or task.md_pdbref:
537                seq,task.ssbond=from_pdb(task.myfile1)
538                task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
539              else:
540                seq=seq_add_x(form.cleaned_data["md_seq"])
541                task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])               
542
543              for i in range(0,len(seq),40):
544                 task.md_seq=task.md_seq+seq[i:i+40]+" "
545
546              if task.md_start != "pdbstart":
547                 task.ssbond=''
548
549              task.md_seed=form.cleaned_data["md_seed"]
550              task.md_nstep=form.cleaned_data["md_nstep"]
551              task.md_dt=form.cleaned_data["md_dt"]
552              task.md_lang=form.cleaned_data["md_lang"]
553              task.md_tau=form.cleaned_data["md_tau"]
554              task.md_scal_fric=form.cleaned_data["md_scal_fric"]
555              task.min_maxfun=form.cleaned_data["min_maxfun"]
556              task.remd_nrep=form.cleaned_data["remd_nrep"]
557              task.remd_nstex=form.cleaned_data["remd_nstex"]
558              task.md_ntwx=form.cleaned_data["md_ntwx"]             
559              task.md_ntwe=form.cleaned_data["md_ntwe"]
560              task.md_respa=form.cleaned_data["md_respa"]
561 #             task.remd_traj1file=form.cleaned_data["remd_traj1file"]
562 #             task.remd_rest1file=form.cleaned_data["remd_rest1file"]
563
564              task.boxx=form.cleaned_data["boxx"]
565              task.boxy=form.cleaned_data["boxy"]             
566              task.boxz=form.cleaned_data["boxz"]             
567
568              task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
569              task.unres_ff=form.cleaned_data["unres_ff"]
570              
571              task.scal_rad = form.cleaned_data["scal_rad"]
572              task.saxs_data = form.cleaned_data["saxs_data"]
573              task.wsaxs = form.cleaned_data["wsaxs"]
574              
575              task.save()
576              return redirect('addmlist',task_id=task.id)
577     else:
578         data= {'name':task.name}
579         form = TaskForm_remd_a(initial=data)
580     basic_adv=False
581     p_type='replica exchange molecular dynamics - advanced options'
582     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
583
584 @login_required
585 def addmlist(request,task_id):
586     task = get_object_or_404(Task, id=task_id)
587     if request.method == 'POST':
588         form = TaskForm_list(task.remd_nrep,request.POST)
589         if form.is_valid():
590              task.remd_multi_t=form.cleaned_data["temperatures"]
591              task.remd_multi_m=form.cleaned_data["multiplexing"]             
592              task.ready=True
593              
594              task.save()
595              if is_lazy_user(request.user):
596               return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')              
597              else:
598               return redirect('/')
599     else:
600       if task.example == 'casp12':
601         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
602         '["2", "2", "2", "2", "2", "2", "2", "2"]',
603         'temperatures':
604         '["270", "280", "290", "300", "310", "320", "330", "340"]'
605         }
606       elif task.unres_ff == 'FF2':
607         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
608         '["1", "1", "1", "1", "1", "1", "1", "1"]',
609         'temperatures':
610         '["270", "280", "290", "300", "310", "320", "330", "345"]'
611         }
612       else: 
613         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
614         '["1", "1", "1", "1", "1", "1", "1", "1"]',
615         'temperatures':
616         '["250", "260", "270", "280", "290", "300", "315", "330"]'
617         }
618       
619       form = TaskForm_list(task.remd_nrep,initial=data)
620     p_type='replica exchange molecular dynamics - advanced options'
621     return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
622
623 @login_required
624 def details(request,task_id):
625     task = get_object_or_404(Task, id=task_id)
626     return render(request, "details.html",{'task':task})
627
628
629 def details1(request,user_id,task_id):
630     task = get_object_or_404(Task, id=task_id)
631     return render(request, "details1.html",{'task':task})
632
633
634 @login_required
635 def delete(request, task_id):
636     Task.objects.get(id=task_id).delete()
637     return redirect('/')
638
639 def refresh_done1(request, task_id):
640     task = get_object_or_404(Task, id=task_id)
641     user = task.owner
642     refresh_done0(task)
643
644     proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
645     njob=0
646     nq=0
647     for line in proc.stdout:
648       if 'piasek4' in line:
649         if line.split()[1]=='test_server':
650           njob+=1
651           if line.split()[-2]=='Q':
652             nq+=1
653     variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
654
655     return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
656
657
658 @login_required
659 def refresh_done(request):
660     user = request.user
661     tasks = Task.objects.filter(owner=user).order_by('-created_date')
662     alldone = 1
663     for task in tasks:
664       refresh_done0(task)
665       if not task.done:
666          alldone=0
667
668     proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
669     njob=0
670     nq=0
671     for line in proc.stdout:
672       if 'piasek4' in line:
673         if line.split()[1]=='test_server':
674           njob+=1
675           if line.split()[-2]=='Q':
676             nq+=1
677     variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
678
679     if is_lazy_user(request.user):
680      return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
681     else:
682      return render(request, "index.html", {
683                 'tasks': tasks ,
684                 'variable' : variable,
685                 'alldone': alldone
686                         })
687
688       
689 def refresh_done0(task):
690       if os.path.isfile(task.jobdirname+'/finished') and not task.done:
691          task.done=True
692
693          with open(task.jobdirname+'/file.out_GB000', 'r') as f:
694
695            if task.type=='min' or task.type=='md':
696              text=""
697              for line in f:
698                if 'ETOT' in line:
699                   task.etot=line.split()[1]
700
701                if 'RMS deviation' in line:
702                   text=text+line
703                   i=1
704                   for line1 in f:
705                      text=text+line1
706                      i+=1
707                      if i>6:
708                        break
709                if 'Total wall' in line:
710                   text=text+line
711                   
712            elif task.type=='remd':
713              j=0
714              text="Acceptance for replica exchanges and number of exchange attempts\n"
715              for line in f:
716                         
717                if 'ACC' in line:
718                     j+=1
719                     text=text+' '.join(line.split()[2:])+"\n"
720                     if j==task.remd_nrep:
721                        j=1
722                        text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
723
724                if 'Total wall' in line:
725                   text=text+line
726                        
727          task.results_text=text
728
729
730          if task.md_pdbref and task.type=='remd':
731          
732           for i in range(1,6):
733            try:
734             with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
735                  line=f.readline()
736                  if i==1:
737                      task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
738                  elif i==2:
739                      task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
740                  elif i==3:
741                      task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
742                  elif i==4:
743                      task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
744                  elif i==5:
745                      task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
746            except EnvironmentError:
747             print 'file_wham_T*pdb open error'
748           for i in range(1,6):
749             with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
750                text=''
751                for line in f:
752                  if 'RMSD of  the common residues=' in line:
753                    text=' RMSD='+line.split()[5]
754                  if 'TM-score    =' in line:
755                    text=text+' TMscore='+line.split()[2]
756                  if 'GDT-TS-score=' in line:
757                    text=text+' GDT_TS='+line.split()[1]
758                     
759                if i==1:
760                      task.remd_model1=task.remd_model1+text
761                elif i==2:
762                      task.remd_model2=task.remd_model2+text
763                elif i==3:
764                      task.remd_model3=task.remd_model3+text
765                elif i==4:
766                      task.remd_model4=task.remd_model4+text
767                elif i==5:
768                      task.remd_model5=task.remd_model5+text
769
770
771
772          if task.type=='remd':  
773           with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
774
775            for line in f:
776              if 'sumprob' in line:
777                 i=0
778                 for line1 in f:
779                   i+=1
780                   if i>6:
781                        break
782                   if i==1:
783                      task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
784                   elif i==2:
785                      task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
786                   elif i==3:
787                      task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
788                   elif i==4:
789                      task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
790                   elif i==5:
791                      task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
792                      
793          
794
795          task.save()
796       elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
797          if (task.type=='min'):
798            task.running =1
799          else:
800            with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
801               line=''
802               for line in f:
803                 pass
804               if line != '':
805                 last = line.split()[0]
806               else:
807                 last = 0
808            task.running=int(1+int(last)*100.0/task.md_nstep)
809            if task.running>100:
810              task.running=100
811          task.save()
812
813     
814       return