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)
37 if line[0:6] == 'ATOM ' and line[13:15] == 'CA':
41 coord.append([x, y, z])
42 if line[0:3] == 'END':
47 for j in xrange(i+1,l):
50 d=(p1[0]-p2[0])**2 + (p1[1]-p2[1])**2 + (p1[2]-p2[2])**2
53 return math.sqrt(maxd)
56 def load_pdbid(pdbid,dirname,filename='plik.pdb'):
57 if (not os.path.isdir(dirname)):
60 file,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
65 pdb_tmp=urllib.urlopen('http://files.rcsb.org/download/'+pdbid+'.pdb')
66 with open(dirname+'/'+filename, 'w') as outfile:
68 if line[0:6] == 'SSBOND' and line[15] == chain and line[29] == chain:
70 if line[0:6] == 'ATOM ' and line[21] == chain:
72 if line[0:6] == 'ENDMDL':
75 file=dirname+'/'+filename
80 def seq_2d_from_pdb(seq_2d,seq):
83 seq_2d=seq_2d.replace('C', '-')
86 for i in range(0,len(seq)):
88 seq_2d_tmp=seq_2d_tmp+'-'
91 seq_2d_tmp=seq_2d_tmp+seq_2d[ii]
94 for i in range(0,len(seq_2d_tmp),40):
95 tmp=tmp+seq_2d_tmp[i:i+40]+" "
98 def seq_2d_add_x(seq_2d,seq,seq_form):
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':
105 if seq_form[-1] !='X' and seq[-1] == 'X':
107 seq_2d=seq_2d[:len(seq)]
109 for i in range(0,len(seq_2d),40):
110 tmp=tmp+seq_2d[i:i+40]+" "
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])
135 if line[0:6] == 'ATOM ' and line[13:15] == 'CA':
136 aa = three_to_one.get(line[17:20])
139 if newchain or i!=ires[-1]:
144 chain_sorted.extend(ch)
146 if line[0:3] == 'TER' and i != '':
147 sequence.append('XX')
150 if line[0:6] == 'SSBOND':
152 b.append(int(line[17:21]))
153 b.append(int(line[31:35]))
156 c.append((line[15:16]))
157 c.append((line[29:30]))
159 if line[0:3] == 'END':
161 if not sequence[-1] == 'XX':
163 while sequence[-1] == 'XX':
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':
170 seq=''.join(sequence)
172 # ssbond=[ [e[0]-ires[0]+1,e[1]-ires[0]+1] for e in ssbond]
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)]
179 return seq,json.dumps(ssbond)
185 tasks = Task.objects.filter(owner=user).order_by('-created_date')
187 tasks_count = Task.objects.filter(owner=user).count()
188 return render(request, "index.html", {
189 'tasks': tasks, 'alldone': 0, 'tasks_count':tasks_count
194 if request.method == 'POST':
195 form = TaskForm(request.POST)
197 name = form.cleaned_data["name"]
199 task = Task(name=name,owner=user,ready=False)
201 return redirect('add_min',task_id=task.id)
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)
212 form = TaskForm_min(request.POST,request.FILES)
214 task.name=form.cleaned_data["name"]
216 pdbid=form.cleaned_data["pdbid"]
218 basename = str(task.owner)
219 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
220 task.jobdirname = "_".join([basename, suffix])
223 task.myfile1=load_pdbid(pdbid,task.jobdirname)
226 task.myfile1=form.cleaned_data["file1"]
228 seq,task.ssbond=from_pdb(task.myfile1)
230 for i in range(0,len(seq),40):
231 task.md_seq=task.md_seq+seq[i:i+40]+" "
236 if is_lazy_user(request.user):
237 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
241 data= {'name':task.name}
242 form = TaskForm_min(initial=data)
243 p_type='minimization'
245 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
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)
255 form = TaskForm_min_a(request.POST,request.FILES)
257 task.name=form.cleaned_data["name"]
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"]
266 basename = str(task.owner)
267 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
268 task.jobdirname = "_".join([basename, suffix])
270 pdbid=form.cleaned_data["pdbid"]
272 task.myfile1=load_pdbid(pdbid,task.jobdirname)
275 task.myfile1=form.cleaned_data["file1"]
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"]
283 seq,task.ssbond=from_pdb(task.myfile1)
285 for i in range(0,len(seq),40):
286 task.md_seq=task.md_seq+seq[i:i+40]+" "
291 if is_lazy_user(request.user):
292 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
296 data= {'name':task.name}
297 form = TaskForm_min_a(initial=data)
299 p_type='minimization - advanced options'
300 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
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)
311 form = TaskForm_md(request.POST,request.FILES)
313 task.name=form.cleaned_data["name"]
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:
323 basename = str(task.owner)
324 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
325 task.jobdirname = "_".join([basename, suffix])
327 pdbid=form.cleaned_data["pdbid"]
329 task.myfile1=load_pdbid(pdbid,task.jobdirname)
332 task.myfile1=form.cleaned_data["file1"]
333 task.md_pdbref=form.cleaned_data["md_pdbref"]
336 if task.md_start == "pdbstart" or task.md_pdbref:
337 seq,task.ssbond=from_pdb(task.myfile1)
339 seq=seq_add_x(form.cleaned_data["md_seq"])
341 for i in range(0,len(seq),40):
342 task.md_seq=task.md_seq+seq[i:i+40]+" "
344 if task.md_start != "pdbstart":
347 if any(c.islower() for c in seq):
354 if is_lazy_user(request.user):
355 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
359 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
360 form = TaskForm_md(initial=data)
362 p_type='molecular dynamics'
363 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
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)
374 form = TaskForm_md_a(request.POST,request.FILES)
376 task.name=form.cleaned_data["name"]
379 basename = str(task.owner)
380 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
381 task.jobdirname = "_".join([basename, suffix])
383 pdbid=form.cleaned_data["pdbid"]
385 task.myfile1=load_pdbid(pdbid,task.jobdirname)
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"]
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)
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"])
400 for i in range(0,len(seq),40):
401 task.md_seq=task.md_seq+seq[i:i+40]+" "
403 if task.md_start != "pdbstart":
406 task.md_seed=form.cleaned_data["md_seed"]
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):
423 task.boxx=form.cleaned_data["boxx"]
424 task.boxy=form.cleaned_data["boxy"]
425 task.boxz=form.cleaned_data["boxz"]
431 if is_lazy_user(request.user):
432 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
436 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
437 form = TaskForm_md_a(initial=data)
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})
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)
450 form = TaskForm_remd(request.POST,request.FILES)
452 task.name=form.cleaned_data["name"]
454 task.md_start=form.cleaned_data["md_start"]
456 basename = str(task.owner)
457 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
458 task.jobdirname = "_".join([basename, suffix])
460 pdbid=form.cleaned_data["pdbid"]
462 task.myfile1=load_pdbid(pdbid,task.jobdirname)
465 task.myfile1=form.cleaned_data["file1"]
466 task.md_pdbref=form.cleaned_data["md_pdbref"]
467 task.md_ntwx=task.remd_nstex
470 if task.md_start == "pdbstart" or task.md_pdbref:
471 seq,task.ssbond=from_pdb(task.myfile1)
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]+" "
477 if task.md_start != "pdbstart":
480 task.md_seed=form.cleaned_data["md_seed"]
482 task.md_nstep=form.cleaned_data["md_nstep"]
483 task.md_total_steps=task.md_nstep
485 if any(c.islower() for c in seq):
494 if is_lazy_user(request.user):
495 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
499 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
500 form = TaskForm_remd(initial=data)
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})
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'
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':
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)
667 form = TaskForm_remd_a(request.POST,request.FILES)
669 task.name=form.cleaned_data["name"]
672 basename = str(task.owner)
673 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
674 task.jobdirname = "_".join([basename, suffix])
676 pdbid=form.cleaned_data["pdbid"]
678 task.myfile1=load_pdbid(pdbid,task.jobdirname)
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"]
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)
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"])
693 for i in range(0,len(seq),40):
694 task.md_seq=task.md_seq+seq[i:i+40]+" "
696 if task.md_start != "pdbstart":
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):
716 # task.remd_traj1file=form.cleaned_data["remd_traj1file"]
717 # task.remd_rest1file=form.cleaned_data["remd_rest1file"]
719 task.boxx=form.cleaned_data["boxx"]
720 task.boxy=form.cleaned_data["boxy"]
721 task.boxz=form.cleaned_data["boxz"]
723 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
724 task.unres_ff=form.cleaned_data["unres_ff"]
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"]
731 return redirect('addmlist',task_id=task.id)
733 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
734 form = TaskForm_remd_a(initial=data)
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})
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)
747 form = TaskForm_dock(request.POST,request.FILES)
749 task.name=form.cleaned_data["name"]
752 basename = str(task.owner)
753 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
754 task.jobdirname = "_".join([basename, suffix])
756 pdbid=form.cleaned_data["pdbid"]
758 task.myfile1=load_pdbid(pdbid,task.jobdirname)
761 task.myfile1=form.cleaned_data["file1"]
763 pdbid2=form.cleaned_data["pdbid2"]
765 task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
767 seq2,ssbond2=from_pdb(task.myfile2)
769 task.myfile2=form.cleaned_data["file2"]
771 seq2=seq_add_x(form.cleaned_data["md_seq"])
774 seq2,ssbond2=from_pdb(task.myfile2)
776 task.md_ntwx=task.remd_nstex
777 task.md_start="pdbstart"
778 task.remd_multi_m='["3", "3", "3", "3", "3", "3", "3", "3"]'
779 if task.md_seq2 =='':
783 task.dock_peptide=form.cleaned_data["dock_peptide"]
787 seq1,ssbond1=from_pdb(task.myfile1)
790 if seq1[-1]=='X' and seq2[0]=='X':
792 elif seq1[-1]!='X' and seq2[0]!='X':
797 for i in range(0,len(seq),40):
798 task.md_seq=task.md_seq+seq[i:i+40]+" "
800 task.md_seed=form.cleaned_data["md_seed"]
802 task.md_nstep=form.cleaned_data["md_nstep"]
803 task.md_total_steps=task.md_nstep
805 if any(c.islower() for c in seq):
809 box1=dock_box(task.myfile1)
811 box2=dock_box(task.myfile2)
813 box2=len(task.md_seq2)*2.0
814 task.boxx=(box1+box2)*1.2+20
815 task.boxy=(box1+box2)*1.2+20
816 task.boxz=(box1+box2)*1.2+20
823 if is_lazy_user(request.user):
824 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
828 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
829 form = TaskForm_dock(initial=data)
832 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
835 def add_dock_a(request,task_id):
836 task = get_object_or_404(Task, id=task_id)
837 if request.method == 'POST':
838 if '_example' in request.POST:
839 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
840 form = TaskForm_dock_a(initial=data)
842 form = TaskForm_dock_a(request.POST,request.FILES)
844 task.name=form.cleaned_data["name"]
847 basename = str(task.owner)
848 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
849 task.jobdirname = "_".join([basename, suffix])
851 pdbid=form.cleaned_data["pdbid"]
853 task.myfile1=load_pdbid(pdbid,task.jobdirname)
856 task.myfile1=form.cleaned_data["file1"]
858 pdbid2=form.cleaned_data["pdbid2"]
860 task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
863 task.myfile2=form.cleaned_data["file2"]
865 seq2=seq_add_x(form.cleaned_data["md_seq"])
868 seq2,ssbond2=from_pdb(task.myfile2)
871 task.md_ntwx=task.remd_nstex
872 task.md_start="pdbstart"
873 if task.md_seq2 =='':
877 task.dock_peptide=form.cleaned_data["dock_peptide"]
881 seq1,ssbond1=from_pdb(task.myfile1)
883 if seq1[-1]=='X' and seq2[0]=='X':
885 elif seq1[-1]!='X' and seq2[0]!='X':
890 for i in range(0,len(seq),40):
891 task.md_seq=task.md_seq+seq[i:i+40]+" "
893 task.md_seed=form.cleaned_data["md_seed"]
895 task.md_nstep=form.cleaned_data["md_nstep"]
896 task.md_total_steps=task.md_nstep
898 task.md_dt=form.cleaned_data["md_dt"]
899 task.md_lang=form.cleaned_data["md_lang"]
900 task.md_tau=form.cleaned_data["md_tau"]
901 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
902 task.min_maxfun=form.cleaned_data["min_maxfun"]
903 task.remd_nrep=form.cleaned_data["remd_nrep"]
904 task.remd_nstex=form.cleaned_data["remd_nstex"]
905 task.md_ntwx=form.cleaned_data["md_ntwx"]
906 task.md_ntwe=form.cleaned_data["md_ntwe"]
908 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
909 task.unres_ff=form.cleaned_data["unres_ff"]
911 if any(c.islower() for c in seq):
915 box1=dock_box(task.myfile1)
917 box2=dock_box(task.myfile2)
919 box2=len(task.md_seq2)*2.0
920 task.boxx=(box1+box2)*1.2+20
921 task.boxy=(box1+box2)*1.2+20
922 task.boxz=(box1+box2)*1.2+20
925 return redirect('addmlist',task_id=task.id)
928 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
929 form = TaskForm_dock_a(initial=data)
931 p_type='docking - advanced options'
932 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
937 def addmlist(request,task_id):
938 task = get_object_or_404(Task, id=task_id)
939 if request.method == 'POST':
940 form = TaskForm_list(task.remd_nrep,request.POST)
942 task.remd_multi_t=form.cleaned_data["temperatures"]
943 task.remd_multi_m=form.cleaned_data["multiplexing"]
947 if is_lazy_user(request.user):
948 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
952 if task.example == 'casp12':
953 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
954 '["2", "2", "2", "2", "2", "2", "2", "2"]',
956 '["270", "280", "290", "300", "310", "320", "330", "340"]'
958 elif task.unres_ff == 'FF2':
959 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
960 '["1", "1", "1", "1", "1", "1", "1", "1"]',
962 '["270", "280", "290", "300", "310", "320", "330", "345"]'
965 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
966 '["1", "1", "1", "1", "1", "1", "1", "1"]',
968 '["250", "260", "270", "280", "290", "300", "315", "330"]'
971 form = TaskForm_list(task.remd_nrep,initial=data)
972 p_type='replica exchange molecular dynamics - advanced options'
973 return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
976 def details(request,task_id):
977 task = get_object_or_404(Task, id=task_id)
978 return render(request, "details.html",{'task':task})
981 def details1(request,user_id,task_id):
982 task = get_object_or_404(Task, id=task_id)
983 return render(request, "details1.html",{'task':task})
987 def delete(request, task_id):
988 Task.objects.get(id=task_id).delete()
992 def restart(request, task_id):
993 task = get_object_or_404(Task, id=task_id)
997 def add_restart_inp():
998 with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
1000 if 'reset_vel=' in line:
1001 f2.write('{:79}'.format('restart'+line[7:]))
1004 os.remove('file.inp')
1005 os.rename('file.inp.tmp','file.inp')
1009 if os.path.isfile(task.jobdirname+'/finished'):
1010 os.remove(task.jobdirname+'/finished')
1013 task.md_total_steps = task.md_total_steps+task.md_nstep
1015 if task.type == 'md':
1016 os.chdir(task.jobdirname)
1018 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
1020 elif task.type == 'remd':
1021 os.chdir(task.jobdirname)
1023 tmp1=json.loads(task.remd_multi_m)
1024 nreplicas=sum(map(int, tmp1))
1025 with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
1027 if 'rec_end=' in line:
1028 rec=task.md_total_steps/task.md_ntwx
1029 f2.write('nfile_cx=1 rec_start='+str(rec/10)
1030 +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
1031 elif 'isampl=' in line:
1032 if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
1035 isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
1036 f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
1039 os.remove('file_wham.inp')
1040 os.rename('file_wham.tmp','file_wham.inp')
1041 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
1045 def restart1(request, user_id, task_id):
1046 task = get_object_or_404(Task, id=task_id)
1049 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1052 def refresh_done1(request, task_id):
1053 task = get_object_or_404(Task, id=task_id)
1057 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1060 for line in proc.stdout:
1061 if 'piasek4' in line:
1062 if line.split()[1]=='test_server':
1064 if line.split()[-2]=='Q':
1066 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1068 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1072 def refresh_done(request):
1074 tasks = Task.objects.filter(owner=user).order_by('-created_date')
1075 tasks_count = Task.objects.filter(owner=user).count()
1082 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1085 for line in proc.stdout:
1086 if 'piasek4' in line:
1087 if line.split()[1]=='test_server':
1089 if line.split()[-2]=='Q':
1091 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1093 if is_lazy_user(request.user):
1094 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1096 return render(request, "index.html", {
1098 'variable' : variable,
1100 'tasks_count':tasks_count
1104 def refresh_done0(task):
1105 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
1108 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1110 if task.type=='min' or task.type=='md':
1114 task.etot=line.split()[1]
1116 if 'RMS deviation' in line:
1124 if 'Total wall' in line:
1127 elif task.type=='remd' or task.type=='dock':
1129 text="Acceptance for replica exchanges and number of exchange attempts\n"
1134 text=text+' '.join(line.split()[2:])+"\n"
1135 if j==task.remd_nrep:
1137 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
1139 if 'Total wall' in line:
1142 task.results_text=text
1145 if task.md_pdbref and task.type=='remd' or task.type=='dock' and task.md_seq2 == '':
1147 for i in range(1,6):
1149 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
1152 task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
1154 task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
1156 task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
1158 task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
1160 task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
1161 except EnvironmentError:
1162 print 'file_wham_T*pdb open error'
1163 for i in range(1,6):
1164 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1167 if 'RMSD of the common residues=' in line:
1168 text=' RMSD='+line.split()[5]
1169 if 'TM-score =' in line:
1170 text=text+' TMscore='+line.split()[2]
1171 if 'GDT-TS-score=' in line:
1172 text=text+' GDT_TS='+line.split()[1]
1175 task.remd_model1=task.remd_model1+text
1177 task.remd_model2=task.remd_model2+text
1179 task.remd_model3=task.remd_model3+text
1181 task.remd_model4=task.remd_model4+text
1183 task.remd_model5=task.remd_model5+text
1185 if task.type=='dock':
1186 for i in range(1,6):
1187 with open(task.jobdirname+'/dockq_'+str(i)+'.out', 'r') as f:
1191 text=' Fnat='+line.split()[1]
1193 text=text+' iRMS='+line.split()[1]
1195 text=text+' LRMS='+line.split()[1]
1196 if 'CAPRI' in line and not 'DockQ_CAPRI' in line:
1197 text=text+' CAPRI='+line.split()[1]
1198 if 'DockQ_CAPRI' in line:
1199 text=text+' DockQ_CAPRI= '+line.split()[1]
1200 if 'DockQ ' in line:
1201 text=text+' DockQ='+line.split()[1]
1204 task.remd_model1=task.remd_model1+text
1206 task.remd_model2=task.remd_model2+text
1208 task.remd_model3=task.remd_model3+text
1210 task.remd_model4=task.remd_model4+text
1212 task.remd_model5=task.remd_model5+text
1215 if task.type=='remd' or task.type=='dock':
1216 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1219 if 'sumprob' in line:
1226 task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[-2]
1228 task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[-2]
1230 task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[-2]
1232 task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[-2]
1234 task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[-2]
1239 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1240 if (task.type=='min'):
1242 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1247 last = line.split()[0]
1251 task.running=int(1+int(last)*100.0/task.min_maxmin)
1254 if task.running>100:
1257 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1262 last = line.split()[0]
1265 task.running=int(1+int(last)*100.0/task.md_nstep)
1266 if task.running>100:
1274 def zip_all_files(request, task_id):
1276 from django.http import HttpResponse
1277 from wsgiref.util import FileWrapper
1278 from django.core.files.temp import NamedTemporaryFile
1280 task = get_object_or_404(Task, id=task_id)
1282 temp=NamedTemporaryFile()
1283 archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
1284 for (dirpath, dirnames, filenames) in os.walk(task.jobdirname):
1285 for file1 in filenames:
1286 archive.write(dirpath+"/"+file1,file1)
1289 wrapper = FileWrapper(temp)
1290 response = HttpResponse(wrapper, content_type='application/zip')
1291 response['Content-Disposition'] = 'attachment; filename=all.zip'