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)
979 remd_models=json.loads(task.remd_models)
982 remd_models.append(task.remd_model1)
983 remd_models.append(task.remd_model2)
984 remd_models.append(task.remd_model3)
985 remd_models.append(task.remd_model4)
986 remd_models.append(task.remd_model5)
987 return render(request, "details.html",{'task':task,'remd_models':remd_models})
990 def details1(request,user_id,task_id):
991 task = get_object_or_404(Task, id=task_id)
992 return render(request, "details1.html",{'task':task})
996 def delete(request, task_id):
997 Task.objects.get(id=task_id).delete()
1001 def restart(request, task_id):
1002 task = get_object_or_404(Task, id=task_id)
1004 return redirect('/')
1006 def add_restart_inp():
1007 with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
1009 if 'reset_vel=' in line:
1010 f2.write('{:79}'.format('restart'+line[7:]))
1013 os.remove('file.inp')
1014 os.rename('file.inp.tmp','file.inp')
1018 if os.path.isfile(task.jobdirname+'/finished'):
1019 os.remove(task.jobdirname+'/finished')
1022 task.md_total_steps = task.md_total_steps+task.md_nstep
1024 if task.type == 'md':
1025 os.chdir(task.jobdirname)
1027 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
1029 elif task.type == 'remd' or task.type == 'dock':
1030 os.chdir(task.jobdirname)
1032 tmp1=json.loads(task.remd_multi_m)
1033 nreplicas=sum(map(int, tmp1))
1034 with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
1036 if 'rec_end=' in line:
1037 rec=task.md_total_steps/task.md_ntwx
1038 f2.write('nfile_cx=1 rec_start='+str(rec/10)
1039 +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
1040 elif 'isampl=' in line:
1041 if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
1044 isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
1045 f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
1048 os.remove('file_wham.inp')
1049 os.rename('file_wham.tmp','file_wham.inp')
1050 if task.type == 'dock':
1051 with open('pbs8.csh','r') as f1, open ('pbs8.tmp','w') as f2:
1053 if 'generator_v13' in line:
1057 os.remove('pbs8.csh')
1058 os.rename('pbs8.tmp','pbs8.csh')
1059 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
1063 def restart1(request, user_id, task_id):
1064 task = get_object_or_404(Task, id=task_id)
1067 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1070 def refresh_done1(request, task_id):
1071 task = get_object_or_404(Task, id=task_id)
1075 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1078 for line in proc.stdout:
1079 if 'piasek4' in line:
1080 if line.split()[1]=='test_server':
1082 if line.split()[-2]=='Q':
1084 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1086 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1090 def refresh_done(request):
1092 tasks = Task.objects.filter(owner=user).order_by('-created_date')
1093 tasks_count = Task.objects.filter(owner=user).count()
1100 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1103 for line in proc.stdout:
1104 if 'piasek4' in line:
1105 if line.split()[1]=='test_server':
1107 if line.split()[-2]=='Q':
1109 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1111 if is_lazy_user(request.user):
1112 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1114 return render(request, "index.html", {
1116 'variable' : variable,
1118 'tasks_count':tasks_count
1122 def refresh_done0(task):
1123 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
1126 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1128 if task.type=='min' or task.type=='md':
1132 task.etot=line.split()[1]
1134 if 'RMS deviation' in line:
1142 if 'Total wall' in line:
1145 elif task.type=='remd' or task.type=='dock':
1147 text="Acceptance for replica exchanges and number of exchange attempts\n"
1152 text=text+' '.join(line.split()[2:])+"\n"
1153 if j==task.remd_nrep:
1155 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
1157 if 'Total wall' in line:
1160 task.results_text=text
1163 if task.md_pdbref and task.type=='remd' or task.type=='dock' and task.md_seq2 == '':
1166 for i in range(1,6):
1168 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
1170 remd_models.append('Cluster'+str(i)+' '.join(line.split()[-3:]))
1171 except EnvironmentError:
1172 print 'file_wham_T*pdb open error'
1173 for i in range(1,6):
1174 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1177 if 'RMSD of the common residues=' in line:
1178 text=' RMSD='+line.split()[5]
1179 if 'TM-score =' in line:
1180 text=text+' TMscore='+line.split()[2]
1181 if 'GDT-TS-score=' in line:
1182 text=text+' GDT_TS='+line.split()[1]
1184 remd_models[i-1]=remd_models[i-1]+text
1186 if task.type=='dock':
1187 for i in range(1,6):
1188 with open(task.jobdirname+'/dockq_'+str(i)+'.out', 'r') as f:
1192 text=' Fnat='+line.split()[1]
1194 text=text+' iRMS='+line.split()[1]
1196 text=text+' LRMS='+line.split()[1]
1197 if 'CAPRI' in line and not 'DockQ_CAPRI' in line:
1198 text=text+' CAPRI='+line.split()[1]
1199 if 'DockQ_CAPRI' in line:
1200 text=text+' DockQ_CAPRI= '+line.split()[1]
1201 if 'DockQ ' in line:
1202 text=text+' DockQ='+line.split()[1]
1204 remd_models[i-1]=remd_models[i-1]+text
1207 if task.type=='remd' or task.type=='dock':
1208 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1211 if 'sumprob' in line:
1218 remd_models[i-1]=remd_models[i-1]+' Cluster'+str(i)+'probability= '+line1.split()[-2]
1222 task.remd_models=json.dumps(remd_models)
1225 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1226 if (task.type=='min'):
1228 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1233 last = line.split()[0]
1237 task.running=int(1+int(last)*100.0/task.min_maxmin)
1240 if task.running>100:
1243 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1248 last = line.split()[0]
1251 task.running=int(1+int(last)*100.0/task.md_nstep)
1252 if task.running>100:
1260 def zip_all_files(request, task_id):
1262 from django.http import HttpResponse
1263 from wsgiref.util import FileWrapper
1264 from django.core.files.temp import NamedTemporaryFile
1266 task = get_object_or_404(Task, id=task_id)
1268 temp=NamedTemporaryFile()
1269 archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
1270 for (dirpath, dirnames, filenames) in os.walk(task.jobdirname):
1271 for file1 in filenames:
1272 archive.write(dirpath+"/"+file1,file1)
1275 wrapper = FileWrapper(temp)
1276 response = HttpResponse(wrapper, content_type='application/zip')
1277 response['Content-Disposition'] = 'attachment; filename=all.zip'