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
5 from .models import Task
10 from lazysignup.decorators import allow_lazy_user
11 from lazysignup.utils import is_lazy_user
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'),
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'),
31 three_to_one = dict(res_codes)
33 def load_pdbid(pdbid,dirname):
36 file,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
41 pdb_tmp=urllib.urlopen('http://files.rcsb.org/download/'+pdbid+'.pdb')
42 with open(dirname+'/plik.pdb', 'w') as outfile:
44 if line[0:6] == 'SSBOND' and line[15] == chain and line[29] == chain:
46 if line[0:6] == 'ATOM ' and line[21] == chain:
49 file=dirname+'/plik.pdb'
54 def seq_2d_from_pdb(seq_2d,seq):
57 seq_2d=seq_2d.replace('C', '-')
60 for i in range(0,len(seq)):
62 seq_2d_tmp=seq_2d_tmp+'-'
65 seq_2d_tmp=seq_2d_tmp+seq_2d[ii]
68 for i in range(0,len(seq_2d_tmp),40):
69 tmp=tmp+seq_2d_tmp[i:i+40]+" "
72 def seq_2d_add_x(seq_2d,seq,seq_form):
75 seq_2d=seq_2d[:len(seq_form)]
76 seq_2d=seq_2d.replace('C', '-')
77 if seq_form[0] !='X' and seq[0] == 'X':
79 if seq_form[-1] !='X' and seq[-1] == 'X':
81 seq_2d=seq_2d[:len(seq)]
83 for i in range(0,len(seq_2d),40):
84 tmp=tmp+seq_2d[i:i+40]+" "
87 def seq_add_x(sequence):
88 if sequence[0] != 'G' and sequence[0] != 'g' and sequence[0] != 'X':
90 if sequence[-1] != 'G' and sequence[-1] != 'g' and sequence[-1] != 'X':
92 set ='CDSQKIPTFNGHLRWAVEYMXcdsqkiptfnhlrwaveym'
93 sequence = ''.join([c for c in sequence if c in set])
109 if line[0:6] == 'ATOM ' and line[13:15] == 'CA':
110 aa = three_to_one.get(line[17:20])
113 if newchain or i!=ires[-1]:
118 chain_sorted.extend(ch)
120 if line[0:3] == 'TER' and i != '':
121 sequence.append('XX')
124 if line[0:6] == 'SSBOND':
126 b.append(int(line[17:21]))
127 b.append(int(line[31:35]))
130 c.append((line[15:16]))
131 c.append((line[29:30]))
133 if line[0:3] == 'END':
135 if not sequence[-1] == 'XX':
137 while sequence[-1] == 'XX':
139 if sequence[0] != 'G':
140 sequence.insert(0,'X')
141 ssbond=[ [e[0]+1,e[1]+1] for e in ssbond]
142 if sequence[-1] != 'G':
144 seq=''.join(sequence)
146 # ssbond=[ [e[0]-ires[0]+1,e[1]-ires[0]+1] for e in ssbond]
148 for c in chain_sorted:
149 unres_shift[c]=i+chain_start[c]
150 i=i-(chain_end[c]-chain_start[c])-3
151 ssbond=[ [e[0]-unres_shift[c[0]]+1,e[1]-unres_shift[c[1]]+1] for e,c in zip(ssbond,ssbond_ch)]
153 return seq,json.dumps(ssbond)
159 tasks = Task.objects.filter(owner=user).order_by('-created_date')
161 return render(request, "index.html", {
162 'tasks': tasks, 'alldone': 0
167 if request.method == 'POST':
168 form = TaskForm(request.POST)
170 name = form.cleaned_data["name"]
172 task = Task(name=name,owner=user,ready=False)
174 return redirect('add_min',task_id=task.id)
178 def add_min(request,task_id):
179 task = get_object_or_404(Task, id=task_id)
180 if request.method == 'POST':
181 if '_example' in request.POST:
182 data= {'name':task.name,'pdbid':'1BDD'}
183 form = TaskForm_min(initial=data)
185 form = TaskForm_min(request.POST,request.FILES)
187 task.name=form.cleaned_data["name"]
189 pdbid=form.cleaned_data["pdbid"]
191 basename = str(task.owner)
192 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
193 task.jobdirname = "_".join([basename, suffix])
196 task.myfile1=load_pdbid(pdbid,task.jobdirname)
199 task.myfile1=form.cleaned_data["file1"]
201 seq,task.ssbond=from_pdb(task.myfile1)
203 for i in range(0,len(seq),40):
204 task.md_seq=task.md_seq+seq[i:i+40]+" "
209 if is_lazy_user(request.user):
210 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
214 data= {'name':task.name}
215 form = TaskForm_min(initial=data)
216 p_type='minimization'
218 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
221 def add_min_a(request,task_id):
222 task = get_object_or_404(Task, id=task_id)
223 if request.method == 'POST':
224 if '_example' in request.POST:
225 data= {'name':task.name,'pdbid':'1EI0','unres_ff':'opt-wtfsa-2'}
226 form = TaskForm_min_a(initial=data)
228 form = TaskForm_min_a(request.POST,request.FILES)
230 task.name=form.cleaned_data["name"]
232 # task.min_choice=form.cleaned_data["min_choice"]
233 task.min_overlap=form.cleaned_data["min_overlap"]
234 task.min_searchsc=form.cleaned_data["min_searchsc"]
235 task.min_maxmin=form.cleaned_data["min_maxmin"]
236 task.min_maxfun=form.cleaned_data["min_maxfun"]
237 task.min_pdbout=form.cleaned_data["min_pdbout"]
239 basename = str(task.owner)
240 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
241 task.jobdirname = "_".join([basename, suffix])
243 pdbid=form.cleaned_data["pdbid"]
245 task.myfile1=load_pdbid(pdbid,task.jobdirname)
248 task.myfile1=form.cleaned_data["file1"]
250 task.min_unres_pdb=form.cleaned_data["min_unres_pdb"]
251 task.unres_ff=form.cleaned_data["unres_ff"]
252 task.boxx=form.cleaned_data["boxx"]
253 task.boxy=form.cleaned_data["boxy"]
254 task.boxz=form.cleaned_data["boxz"]
256 seq,task.ssbond=from_pdb(task.myfile1)
258 for i in range(0,len(seq),40):
259 task.md_seq=task.md_seq+seq[i:i+40]+" "
264 if is_lazy_user(request.user):
265 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
269 data= {'name':task.name}
270 form = TaskForm_min_a(initial=data)
272 p_type='minimization - advanced options'
273 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
276 def add_md(request,task_id):
277 task = get_object_or_404(Task, id=task_id)
278 if request.method == 'POST':
279 if '_example' in request.POST:
280 data= {'name':task.name,'pdbid':'1IGD','md_start':'pdbstart',
281 'md_pdbref':True,'md_temp':200,'md_seed':-39912345}
282 form = TaskForm_md(initial=data)
284 form = TaskForm_md(request.POST,request.FILES)
286 task.name=form.cleaned_data["name"]
288 task.md_seed=form.cleaned_data["md_seed"]
289 task.md_start=form.cleaned_data["md_start"]
290 task.md_temp=form.cleaned_data["md_temp"]
291 task.md_nstep=form.cleaned_data["md_nstep"]
293 basename = str(task.owner)
294 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
295 task.jobdirname = "_".join([basename, suffix])
297 pdbid=form.cleaned_data["pdbid"]
299 task.myfile1=load_pdbid(pdbid,task.jobdirname)
302 task.myfile1=form.cleaned_data["file1"]
303 task.md_pdbref=form.cleaned_data["md_pdbref"]
306 if task.md_start == "pdbstart" or task.md_pdbref:
307 seq,task.ssbond=from_pdb(task.myfile1)
309 seq=seq_add_x(form.cleaned_data["md_seq"])
311 for i in range(0,len(seq),40):
312 task.md_seq=task.md_seq+seq[i:i+40]+" "
314 if task.md_start != "pdbstart":
317 if any(c.islower() for c in seq):
323 if is_lazy_user(request.user):
324 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
328 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
329 form = TaskForm_md(initial=data)
331 p_type='molecular dynamics'
332 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
335 def add_md_a(request,task_id):
336 task = get_object_or_404(Task, id=task_id)
337 if request.method == 'POST':
338 if '_example' in request.POST:
339 data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf',
340 'md_pdbref':True,'md_mdpdb':True,'md_seed':-39912345}
341 form = TaskForm_md_a(initial=data)
343 form = TaskForm_md_a(request.POST,request.FILES)
345 task.name=form.cleaned_data["name"]
348 basename = str(task.owner)
349 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
350 task.jobdirname = "_".join([basename, suffix])
352 pdbid=form.cleaned_data["pdbid"]
354 task.myfile1=load_pdbid(pdbid,task.jobdirname)
357 task.myfile1=form.cleaned_data["file1"]
358 task.md_start=form.cleaned_data["md_start"]
359 task.md_pdbref=form.cleaned_data["md_pdbref"]
362 if task.md_start == "pdbstart" or task.md_pdbref:
363 seq,task.ssbond=from_pdb(task.myfile1)
364 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
366 seq=seq_add_x(form.cleaned_data["md_seq"])
367 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
369 for i in range(0,len(seq),40):
370 task.md_seq=task.md_seq+seq[i:i+40]+" "
372 if task.md_start != "pdbstart":
375 task.md_seed=form.cleaned_data["md_seed"]
377 task.md_temp=form.cleaned_data["md_temp"]
378 task.md_nstep=form.cleaned_data["md_nstep"]
379 task.md_ntwe=form.cleaned_data["md_ntwe"]
380 task.md_ntwx=form.cleaned_data["md_ntwx"]
381 task.md_dt=form.cleaned_data["md_dt"]
382 task.md_lang=form.cleaned_data["md_lang"]
383 task.md_tau=form.cleaned_data["md_tau"]
384 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
385 task.md_mdpdb=form.cleaned_data["md_mdpdb"]
386 task.unres_ff=form.cleaned_data["unres_ff"]
387 task.md_respa=form.cleaned_data["md_respa"]
388 if any(c.islower() for c in seq):
390 task.boxx=form.cleaned_data["boxx"]
391 task.boxy=form.cleaned_data["boxy"]
392 task.boxz=form.cleaned_data["boxz"]
398 if is_lazy_user(request.user):
399 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
403 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
404 form = TaskForm_md_a(initial=data)
406 p_type='molecular dynamics - advanced options'
407 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
410 def add_remd(request,task_id):
411 task = get_object_or_404(Task, id=task_id)
412 if request.method == 'POST':
413 if '_example' in request.POST:
414 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
415 form = TaskForm_remd(initial=data)
417 form = TaskForm_remd(request.POST,request.FILES)
419 task.name=form.cleaned_data["name"]
421 task.md_start=form.cleaned_data["md_start"]
423 basename = str(task.owner)
424 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
425 task.jobdirname = "_".join([basename, suffix])
427 pdbid=form.cleaned_data["pdbid"]
429 task.myfile1=load_pdbid(pdbid,task.jobdirname)
432 task.myfile1=form.cleaned_data["file1"]
433 task.md_pdbref=form.cleaned_data["md_pdbref"]
434 task.md_ntwx=task.remd_nstex
437 if task.md_start == "pdbstart" or task.md_pdbref:
438 seq,task.ssbond=from_pdb(task.myfile1)
440 seq=seq_add_x(form.cleaned_data["md_seq"])
441 for i in range(0,len(seq),40):
442 task.md_seq=task.md_seq+seq[i:i+40]+" "
444 if task.md_start != "pdbstart":
447 task.md_seed=form.cleaned_data["md_seed"]
449 task.md_nstep=form.cleaned_data["md_nstep"]
451 if any(c.islower() for c in seq):
459 if is_lazy_user(request.user):
460 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
464 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
465 form = TaskForm_remd(initial=data)
467 p_type='replica exchange molecular dynamics'
468 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
471 def add_remd_a(request,task_id):
472 from django.core.files.uploadedfile import UploadedFile
473 task = get_object_or_404(Task, id=task_id)
474 if request.method == 'POST':
475 if '_example' in request.POST:
476 data= {'name':task.name,'pdbid':'5G3Q:B','md_pdbref':True,
477 'md_nstep':2000000,'md_lang':'berendsen','unres_ff':'FF2','md_seed':-39912345,
478 'remd_cluter_temp':290,'md_2d':'--EEEEEEE------EEEEEE------EEEEEE------HHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHH---'}
479 form = TaskForm_remd_a(initial=data)
480 task.example='casp12'
482 elif '_example_saxs' in request.POST:
483 data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True,
484 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
485 'remd_cluter_temp':270,
486 'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
524 form = TaskForm_remd_a(initial=data)
525 elif '_example_saxs1' in request.POST:
526 data= {'name':task.name,'pdbid':'2KMS','md_pdbref':True,'md_start':'pdbstart',
527 'md_2d':'----EEEEEE-EEEEE-------EEEEEEEEE--EEEEEE-EEEE---EEEEEEEEE-----EEEEEEE-EEE-HHHHH-EEEE-EEEEEEEEE----EEEEEE---EEE-----',
528 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
529 'remd_cluter_temp':280, 'min_maxfun':50,
530 'scal_rad':5.0,'wsaxs':1000.0,'saxs_data':
531 """0.7100E-00 0.2036E-03
532 0.1420E+01 0.4221E-03
533 0.2130E+01 0.6548E-03
534 0.2840E+01 0.9001E-03
535 0.3550E+01 0.1156E-02
536 0.4260E+01 0.1421E-02
537 0.4970E+01 0.1692E-02
538 0.5680E+01 0.1965E-02
539 0.6390E+01 0.2239E-02
540 0.7100E+01 0.2509E-02
541 0.7810E+01 0.2772E-02
542 0.8520E+01 0.3025E-02
543 0.9230E+01 0.3265E-02
544 0.9940E+01 0.3489E-02
545 0.1065E+02 0.3694E-02
546 0.1136E+02 0.3878E-02
547 0.1207E+02 0.4039E-02
548 0.1278E+02 0.4177E-02
549 0.1349E+02 0.4289E-02
550 0.1420E+02 0.4377E-02
551 0.1491E+02 0.4439E-02
552 0.1562E+02 0.4478E-02
553 0.1633E+02 0.4493E-02
554 0.1704E+02 0.4487E-02
555 0.1775E+02 0.4461E-02
556 0.1846E+02 0.4418E-02
557 0.1917E+02 0.4361E-02
558 0.1988E+02 0.4291E-02
559 0.2059E+02 0.4211E-02
560 0.2130E+02 0.4125E-02
561 0.2201E+02 0.4034E-02
562 0.2272E+02 0.3942E-02
563 0.2343E+02 0.3850E-02
564 0.2414E+02 0.3761E-02
565 0.2485E+02 0.3677E-02
566 0.2556E+02 0.3598E-02
567 0.2627E+02 0.3526E-02
568 0.2698E+02 0.3462E-02
569 0.2769E+02 0.3405E-02
570 0.2840E+02 0.3356E-02
571 0.2911E+02 0.3315E-02
572 0.2982E+02 0.3280E-02
573 0.3053E+02 0.3251E-02
574 0.3124E+02 0.3226E-02
575 0.3195E+02 0.3205E-02
576 0.3266E+02 0.3186E-02
577 0.3337E+02 0.3167E-02
578 0.3408E+02 0.3147E-02
579 0.3479E+02 0.3125E-02
580 0.3550E+02 0.3099E-02
581 0.3621E+02 0.3068E-02
582 0.3692E+02 0.3031E-02
583 0.3763E+02 0.2987E-02
584 0.3834E+02 0.2937E-02
585 0.3905E+02 0.2878E-02
586 0.3976E+02 0.2812E-02
587 0.4047E+02 0.2739E-02
588 0.4118E+02 0.2658E-02
589 0.4189E+02 0.2571E-02
590 0.4260E+02 0.2478E-02
591 0.4331E+02 0.2381E-02
592 0.4402E+02 0.2279E-02
593 0.4473E+02 0.2174E-02
594 0.4544E+02 0.2068E-02
595 0.4615E+02 0.1960E-02
596 0.4686E+02 0.1853E-02
597 0.4757E+02 0.1748E-02
598 0.4828E+02 0.1644E-02
599 0.4899E+02 0.1544E-02
600 0.4970E+02 0.1447E-02
601 0.5041E+02 0.1355E-02
602 0.5112E+02 0.1267E-02
603 0.5183E+02 0.1184E-02
604 0.5254E+02 0.1106E-02
605 0.5325E+02 0.1033E-02
606 0.5396E+02 0.9646E-03
607 0.5467E+02 0.9008E-03
608 0.5538E+02 0.8411E-03
609 0.5609E+02 0.7852E-03
610 0.5680E+02 0.7327E-03
611 0.5751E+02 0.6831E-03
612 0.5822E+02 0.6360E-03
613 0.5893E+02 0.5909E-03
614 0.5964E+02 0.5475E-03
615 0.6035E+02 0.5055E-03
616 0.6106E+02 0.4646E-03
617 0.6177E+02 0.4245E-03
618 0.6248E+02 0.3853E-03
619 0.6319E+02 0.3467E-03
620 0.6390E+02 0.3089E-03
621 0.6461E+02 0.2719E-03
622 0.6532E+02 0.2357E-03
623 0.6603E+02 0.2007E-03
624 0.6674E+02 0.1669E-03
625 0.6745E+02 0.1345E-03
626 0.6816E+02 0.1038E-03
627 0.6887E+02 0.7482E-04
628 0.6958E+02 0.4782E-04
629 0.7029E+02 0.2286E-04"""}
630 form = TaskForm_remd_a(initial=data)
632 form = TaskForm_remd_a(request.POST,request.FILES)
634 task.name=form.cleaned_data["name"]
637 basename = str(task.owner)
638 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
639 task.jobdirname = "_".join([basename, suffix])
641 pdbid=form.cleaned_data["pdbid"]
643 task.myfile1=load_pdbid(pdbid,task.jobdirname)
646 task.myfile1=form.cleaned_data["file1"]
647 task.md_start=form.cleaned_data["md_start"]
648 task.md_pdbref=form.cleaned_data["md_pdbref"]
651 if task.md_start == "pdbstart" or task.md_pdbref:
652 seq,task.ssbond=from_pdb(task.myfile1)
653 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
655 seq=seq_add_x(form.cleaned_data["md_seq"])
656 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
658 for i in range(0,len(seq),40):
659 task.md_seq=task.md_seq+seq[i:i+40]+" "
661 if task.md_start != "pdbstart":
664 task.md_seed=form.cleaned_data["md_seed"]
665 task.md_nstep=form.cleaned_data["md_nstep"]
666 task.md_dt=form.cleaned_data["md_dt"]
667 task.md_lang=form.cleaned_data["md_lang"]
668 task.md_tau=form.cleaned_data["md_tau"]
669 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
670 task.min_maxfun=form.cleaned_data["min_maxfun"]
671 task.remd_nrep=form.cleaned_data["remd_nrep"]
672 task.remd_nstex=form.cleaned_data["remd_nstex"]
673 task.md_ntwx=form.cleaned_data["md_ntwx"]
674 task.md_ntwe=form.cleaned_data["md_ntwe"]
675 task.md_respa=form.cleaned_data["md_respa"]
676 if any(c.islower() for c in seq):
679 # task.remd_traj1file=form.cleaned_data["remd_traj1file"]
680 # task.remd_rest1file=form.cleaned_data["remd_rest1file"]
682 task.boxx=form.cleaned_data["boxx"]
683 task.boxy=form.cleaned_data["boxy"]
684 task.boxz=form.cleaned_data["boxz"]
686 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
687 task.unres_ff=form.cleaned_data["unres_ff"]
689 task.scal_rad = form.cleaned_data["scal_rad"]
690 task.saxs_data = form.cleaned_data["saxs_data"]
691 task.wsaxs = form.cleaned_data["wsaxs"]
694 return redirect('addmlist',task_id=task.id)
696 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
697 form = TaskForm_remd_a(initial=data)
699 p_type='replica exchange molecular dynamics - advanced options'
700 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
703 def addmlist(request,task_id):
704 task = get_object_or_404(Task, id=task_id)
705 if request.method == 'POST':
706 form = TaskForm_list(task.remd_nrep,request.POST)
708 task.remd_multi_t=form.cleaned_data["temperatures"]
709 task.remd_multi_m=form.cleaned_data["multiplexing"]
713 if is_lazy_user(request.user):
714 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
718 if task.example == 'casp12':
719 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
720 '["2", "2", "2", "2", "2", "2", "2", "2"]',
722 '["270", "280", "290", "300", "310", "320", "330", "340"]'
724 elif task.unres_ff == 'FF2':
725 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
726 '["1", "1", "1", "1", "1", "1", "1", "1"]',
728 '["270", "280", "290", "300", "310", "320", "330", "345"]'
731 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
732 '["1", "1", "1", "1", "1", "1", "1", "1"]',
734 '["250", "260", "270", "280", "290", "300", "315", "330"]'
737 form = TaskForm_list(task.remd_nrep,initial=data)
738 p_type='replica exchange molecular dynamics - advanced options'
739 return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
742 def details(request,task_id):
743 task = get_object_or_404(Task, id=task_id)
744 return render(request, "details.html",{'task':task})
747 def details1(request,user_id,task_id):
748 task = get_object_or_404(Task, id=task_id)
749 return render(request, "details1.html",{'task':task})
753 def delete(request, task_id):
754 Task.objects.get(id=task_id).delete()
757 def refresh_done1(request, task_id):
758 task = get_object_or_404(Task, id=task_id)
762 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
765 for line in proc.stdout:
766 if 'piasek4' in line:
767 if line.split()[1]=='test_server':
769 if line.split()[-2]=='Q':
771 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
773 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
777 def refresh_done(request):
779 tasks = Task.objects.filter(owner=user).order_by('-created_date')
786 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
789 for line in proc.stdout:
790 if 'piasek4' in line:
791 if line.split()[1]=='test_server':
793 if line.split()[-2]=='Q':
795 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
797 if is_lazy_user(request.user):
798 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
800 return render(request, "index.html", {
802 'variable' : variable,
807 def refresh_done0(task):
808 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
811 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
813 if task.type=='min' or task.type=='md':
817 task.etot=line.split()[1]
819 if 'RMS deviation' in line:
827 if 'Total wall' in line:
830 elif task.type=='remd':
832 text="Acceptance for replica exchanges and number of exchange attempts\n"
837 text=text+' '.join(line.split()[2:])+"\n"
838 if j==task.remd_nrep:
840 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
842 if 'Total wall' in line:
845 task.results_text=text
848 if task.md_pdbref and task.type=='remd':
852 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
855 task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
857 task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
859 task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
861 task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
863 task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
864 except EnvironmentError:
865 print 'file_wham_T*pdb open error'
867 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
870 if 'RMSD of the common residues=' in line:
871 text=' RMSD='+line.split()[5]
872 if 'TM-score =' in line:
873 text=text+' TMscore='+line.split()[2]
874 if 'GDT-TS-score=' in line:
875 text=text+' GDT_TS='+line.split()[1]
878 task.remd_model1=task.remd_model1+text
880 task.remd_model2=task.remd_model2+text
882 task.remd_model3=task.remd_model3+text
884 task.remd_model4=task.remd_model4+text
886 task.remd_model5=task.remd_model5+text
890 if task.type=='remd':
891 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
894 if 'sumprob' in line:
901 task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
903 task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
905 task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
907 task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
909 task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
914 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
915 if (task.type=='min'):
918 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
923 last = line.split()[0]
926 task.running=int(1+int(last)*100.0/task.md_nstep)