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')
768 task.myfile2=form.cleaned_data["file2"]
770 task.md_ntwx=task.remd_nstex
771 task.md_start="pdbstart"
772 task.remd_multi_m='["3", "3", "3", "3", "3", "3", "3", "3"]'
776 task.dock_peptide=form.cleaned_data["dock_peptide"]
780 seq1,ssbond1=from_pdb(task.myfile1)
781 seq2,ssbond2=from_pdb(task.myfile2)
783 if seq1[-1]=='X' and seq2[0]=='X':
785 elif seq1[-1]!='X' and seq2[0]!='X':
790 for i in range(0,len(seq),40):
791 task.md_seq=task.md_seq+seq[i:i+40]+" "
793 task.md_seed=form.cleaned_data["md_seed"]
795 task.md_nstep=form.cleaned_data["md_nstep"]
796 task.md_total_steps=task.md_nstep
798 if any(c.islower() for c in seq):
802 box1=dock_box(task.myfile1)
803 box2=dock_box(task.myfile2)
804 task.boxx=(box1+box2)*1.2+20
805 task.boxy=(box1+box2)*1.2+20
806 task.boxz=(box1+box2)*1.2+20
813 if is_lazy_user(request.user):
814 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
818 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
819 form = TaskForm_dock(initial=data)
822 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
825 def add_dock_a(request,task_id):
826 task = get_object_or_404(Task, id=task_id)
827 if request.method == 'POST':
828 if '_example' in request.POST:
829 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
830 form = TaskForm_dock_a(initial=data)
832 form = TaskForm_dock_a(request.POST,request.FILES)
834 task.name=form.cleaned_data["name"]
837 basename = str(task.owner)
838 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
839 task.jobdirname = "_".join([basename, suffix])
841 pdbid=form.cleaned_data["pdbid"]
843 task.myfile1=load_pdbid(pdbid,task.jobdirname)
846 task.myfile1=form.cleaned_data["file1"]
848 pdbid2=form.cleaned_data["pdbid2"]
850 task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
853 task.myfile2=form.cleaned_data["file2"]
855 task.md_ntwx=task.remd_nstex
856 task.md_start="pdbstart"
860 task.dock_peptide=form.cleaned_data["dock_peptide"]
864 seq1,ssbond1=from_pdb(task.myfile1)
865 seq2,ssbond2=from_pdb(task.myfile2)
867 if seq1[-1]=='X' and seq2[0]=='X':
869 elif seq1[-1]!='X' and seq2[0]!='X':
874 for i in range(0,len(seq),40):
875 task.md_seq=task.md_seq+seq[i:i+40]+" "
877 task.md_seed=form.cleaned_data["md_seed"]
879 task.md_nstep=form.cleaned_data["md_nstep"]
880 task.md_total_steps=task.md_nstep
882 task.md_dt=form.cleaned_data["md_dt"]
883 task.md_lang=form.cleaned_data["md_lang"]
884 task.md_tau=form.cleaned_data["md_tau"]
885 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
886 task.min_maxfun=form.cleaned_data["min_maxfun"]
887 task.remd_nrep=form.cleaned_data["remd_nrep"]
888 task.remd_nstex=form.cleaned_data["remd_nstex"]
889 task.md_ntwx=form.cleaned_data["md_ntwx"]
890 task.md_ntwe=form.cleaned_data["md_ntwe"]
892 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
893 task.unres_ff=form.cleaned_data["unres_ff"]
895 if any(c.islower() for c in seq):
899 box1=dock_box(task.myfile1)
900 box2=dock_box(task.myfile2)
901 task.boxx=(box1+box2)*1.2+20
902 task.boxy=(box1+box2)*1.2+20
903 task.boxz=(box1+box2)*1.2+20
906 return redirect('addmlist',task_id=task.id)
909 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
910 form = TaskForm_dock_a(initial=data)
912 p_type='docking - advanced options'
913 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
918 def addmlist(request,task_id):
919 task = get_object_or_404(Task, id=task_id)
920 if request.method == 'POST':
921 form = TaskForm_list(task.remd_nrep,request.POST)
923 task.remd_multi_t=form.cleaned_data["temperatures"]
924 task.remd_multi_m=form.cleaned_data["multiplexing"]
928 if is_lazy_user(request.user):
929 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
933 if task.example == 'casp12':
934 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
935 '["2", "2", "2", "2", "2", "2", "2", "2"]',
937 '["270", "280", "290", "300", "310", "320", "330", "340"]'
939 elif task.unres_ff == 'FF2':
940 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
941 '["1", "1", "1", "1", "1", "1", "1", "1"]',
943 '["270", "280", "290", "300", "310", "320", "330", "345"]'
946 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
947 '["1", "1", "1", "1", "1", "1", "1", "1"]',
949 '["250", "260", "270", "280", "290", "300", "315", "330"]'
952 form = TaskForm_list(task.remd_nrep,initial=data)
953 p_type='replica exchange molecular dynamics - advanced options'
954 return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
957 def details(request,task_id):
958 task = get_object_or_404(Task, id=task_id)
959 return render(request, "details.html",{'task':task})
962 def details1(request,user_id,task_id):
963 task = get_object_or_404(Task, id=task_id)
964 return render(request, "details1.html",{'task':task})
968 def delete(request, task_id):
969 Task.objects.get(id=task_id).delete()
973 def restart(request, task_id):
974 task = get_object_or_404(Task, id=task_id)
978 def add_restart_inp():
979 with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
981 if 'reset_vel=' in line:
982 f2.write('{:79}'.format('restart'+line[7:]))
985 os.remove('file.inp')
986 os.rename('file.inp.tmp','file.inp')
990 if os.path.isfile(task.jobdirname+'/finished'):
991 os.remove(task.jobdirname+'/finished')
994 task.md_total_steps = task.md_total_steps+task.md_nstep
996 if task.type == 'md':
997 os.chdir(task.jobdirname)
999 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
1001 elif task.type == 'remd':
1002 os.chdir(task.jobdirname)
1004 tmp1=json.loads(task.remd_multi_m)
1005 nreplicas=sum(map(int, tmp1))
1006 with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
1008 if 'rec_end=' in line:
1009 rec=task.md_total_steps/task.md_ntwx
1010 f2.write('nfile_cx=1 rec_start='+str(rec/10)
1011 +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
1012 elif 'isampl=' in line:
1013 if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
1016 isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
1017 f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
1020 os.remove('file_wham.inp')
1021 os.rename('file_wham.tmp','file_wham.inp')
1022 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
1026 def restart1(request, user_id, task_id):
1027 task = get_object_or_404(Task, id=task_id)
1030 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1033 def refresh_done1(request, task_id):
1034 task = get_object_or_404(Task, id=task_id)
1038 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1041 for line in proc.stdout:
1042 if 'piasek4' in line:
1043 if line.split()[1]=='test_server':
1045 if line.split()[-2]=='Q':
1047 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1049 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1053 def refresh_done(request):
1055 tasks = Task.objects.filter(owner=user).order_by('-created_date')
1056 tasks_count = Task.objects.filter(owner=user).count()
1063 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1066 for line in proc.stdout:
1067 if 'piasek4' in line:
1068 if line.split()[1]=='test_server':
1070 if line.split()[-2]=='Q':
1072 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1074 if is_lazy_user(request.user):
1075 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1077 return render(request, "index.html", {
1079 'variable' : variable,
1081 'tasks_count':tasks_count
1085 def refresh_done0(task):
1086 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
1089 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1091 if task.type=='min' or task.type=='md':
1095 task.etot=line.split()[1]
1097 if 'RMS deviation' in line:
1105 if 'Total wall' in line:
1108 elif task.type=='remd' or task.type=='dock':
1110 text="Acceptance for replica exchanges and number of exchange attempts\n"
1115 text=text+' '.join(line.split()[2:])+"\n"
1116 if j==task.remd_nrep:
1118 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
1120 if 'Total wall' in line:
1123 task.results_text=text
1126 if task.md_pdbref and task.type=='remd' or task.type=='dock':
1128 for i in range(1,6):
1130 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
1133 task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
1135 task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
1137 task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
1139 task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
1141 task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
1142 except EnvironmentError:
1143 print 'file_wham_T*pdb open error'
1144 for i in range(1,6):
1145 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1148 if 'RMSD of the common residues=' in line:
1149 text=' RMSD='+line.split()[5]
1150 if 'TM-score =' in line:
1151 text=text+' TMscore='+line.split()[2]
1152 if 'GDT-TS-score=' in line:
1153 text=text+' GDT_TS='+line.split()[1]
1156 task.remd_model1=task.remd_model1+text
1158 task.remd_model2=task.remd_model2+text
1160 task.remd_model3=task.remd_model3+text
1162 task.remd_model4=task.remd_model4+text
1164 task.remd_model5=task.remd_model5+text
1166 if task.type=='dock':
1167 for i in range(1,6):
1168 with open(task.jobdirname+'/dockq_'+str(i)+'.out', 'r') as f:
1172 text=' Fnat='+line.split()[1]
1174 text=text+' iRMS='+line.split()[1]
1176 text=text+' LRMS='+line.split()[1]
1177 if 'CAPRI' in line and not 'DockQ_CAPRI' in line:
1178 text=text+' CAPRI='+line.split()[1]
1179 if 'DockQ_CAPRI' in line:
1180 text=text+' DockQ_CAPRI= '+line.split()[1]
1181 if 'DockQ ' in line:
1182 text=text+' DockQ='+line.split()[1]
1185 task.remd_model1=task.remd_model1+text
1187 task.remd_model2=task.remd_model2+text
1189 task.remd_model3=task.remd_model3+text
1191 task.remd_model4=task.remd_model4+text
1193 task.remd_model5=task.remd_model5+text
1196 if task.type=='remd' or task.type=='dock':
1197 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1200 if 'sumprob' in line:
1207 task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[-2]
1209 task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[-2]
1211 task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[-2]
1213 task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[-2]
1215 task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[-2]
1220 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1221 if (task.type=='min'):
1223 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1228 last = line.split()[0]
1232 task.running=int(1+int(last)*100.0/task.min_maxmin)
1235 if task.running>100:
1238 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1243 last = line.split()[0]
1246 task.running=int(1+int(last)*100.0/task.md_nstep)
1247 if task.running>100:
1255 def zip_all_files(request, task_id):
1257 from django.http import HttpResponse
1258 from wsgiref.util import FileWrapper
1259 from django.core.files.temp import NamedTemporaryFile
1261 task = get_object_or_404(Task, id=task_id)
1263 temp=NamedTemporaryFile()
1264 archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
1265 for (dirpath, dirnames, filenames) in os.walk(task.jobdirname):
1266 for file1 in filenames:
1267 archive.write(dirpath+"/"+file1,file1)
1270 wrapper = FileWrapper(temp)
1271 response = HttpResponse(wrapper, content_type='application/zip')
1272 response['Content-Disposition'] = 'attachment; filename=all.zip'