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
16 logger = logging.getLogger(__name__)
19 # 20 canonical amino acids
20 ('CYS', 'C'), ('ASP', 'D'), ('SER', 'S'), ('GLN', 'Q'),
21 ('LYS', 'K'), ('ILE', 'I'), ('PRO', 'P'), ('THR', 'T'),
22 ('PHE', 'F'), ('ASN', 'N'), ('GLY', 'G'), ('HIS', 'H'),
23 ('LEU', 'L'), ('ARG', 'R'), ('TRP', 'W'), ('ALA', 'A'),
24 ('VAL', 'V'), ('GLU', 'E'), ('TYR', 'Y'), ('MET', 'M'),
25 ('HSD', 'H'),('HSE', 'H'),('HSP', 'H'),
26 ('HIE', 'H'), ('HID', 'H'),('HIP', 'H'),
28 ('DCY', 'c'), ('DAS', 'd'), ('DSN', 's'), ('DGN', 'q'),
29 ('DLY', 'k'), ('DIL', 'i'), ('DPR', 'p'), ('DTH', 't'),
30 ('DPN', 'f'), ('DSG', 'n'), ('DHI', 'h'),
31 ('DLE', 'l'), ('DAR', 'r'), ('DTR', 'w'), ('DAL', 'a'),
32 ('DVA', 'v'), ('DGL', 'e'), ('DTY', 'y'), ('MED', 'm'),
35 three_to_one = dict(res_codes)
41 if line[0:6] == 'ATOM ' and line[13:15] == 'CA':
45 coord.append([x, y, z])
46 if line[0:3] == 'END':
51 for j in xrange(i+1,l):
54 d=(p1[0]-p2[0])**2 + (p1[1]-p2[1])**2 + (p1[2]-p2[2])**2
57 return math.sqrt(maxd)
60 def load_pdbid(pdbid,dirname,filename='plik.pdb'):
61 if (not os.path.isdir(dirname)):
64 file,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
69 pdb_tmp=urllib.urlopen('http://files.rcsb.org/download/'+pdbid+'.pdb')
70 with open(dirname+'/'+filename, 'w') as outfile:
72 if line[0:6] == 'SSBOND' and line[15] == chain and line[29] == chain:
74 if line[0:6] == 'ATOM ' and line[21] == chain:
76 if line[0:6] == 'ENDMDL':
79 file=dirname+'/'+filename
84 def seq_2d_from_pdb(seq_2d,seq):
87 seq_2d=seq_2d.replace('C', '-')
90 for i in range(0,len(seq)):
92 seq_2d_tmp=seq_2d_tmp+'-'
95 seq_2d_tmp=seq_2d_tmp+seq_2d[ii]
98 for i in range(0,len(seq_2d_tmp),40):
99 tmp=tmp+seq_2d_tmp[i:i+40]+" "
102 def seq_2d_add_x(seq_2d,seq,seq_form):
105 seq_2d=seq_2d[:len(seq_form)]
106 seq_2d=seq_2d.replace('C', '-')
107 if seq_form[0] !='X' and seq[0] == 'X':
109 if seq_form[-1] !='X' and seq[-1] == 'X':
111 seq_2d=seq_2d[:len(seq)]
113 for i in range(0,len(seq_2d),40):
114 tmp=tmp+seq_2d[i:i+40]+" "
117 def seq_add_x(sequence):
118 if sequence[0] != 'G' and sequence[0] != 'g' and sequence[0] != 'X':
119 sequence='X'+sequence
120 if sequence[-1] != 'G' and sequence[-1] != 'g' and sequence[-1] != 'X':
121 sequence=sequence+'X'
122 set ='CDSQKIPTFNGHLRWAVEYMXcdsqkiptfnhlrwaveym'
123 sequence = ''.join([c for c in sequence if c in set])
139 if line[0:6] == 'ATOM ' and line[13:15] == 'CA':
140 aa = three_to_one.get(line[17:20])
143 if newchain or i!=ires[-1]:
148 chain_sorted.extend(ch)
150 if line[0:3] == 'TER' and i != '':
151 sequence.append('XX')
154 if line[0:6] == 'SSBOND':
156 b.append(int(line[17:21]))
157 b.append(int(line[31:35]))
160 c.append((line[15:16]))
161 c.append((line[29:30]))
163 if line[0:3] == 'END':
165 if not sequence[-1] == 'XX':
167 while sequence[-1] == 'XX':
169 if sequence[0] != 'G':
170 sequence.insert(0,'X')
171 ssbond=[ [e[0]+1,e[1]+1] for e in ssbond]
172 if sequence[-1] != 'G':
174 seq=''.join(sequence)
176 # ssbond=[ [e[0]-ires[0]+1,e[1]-ires[0]+1] for e in ssbond]
178 for c in chain_sorted:
179 unres_shift[c]=i+chain_start[c]
180 i=i-(chain_end[c]-chain_start[c])-3
181 ssbond=[ [e[0]-unres_shift[c[0]]+1,e[1]-unres_shift[c[1]]+1] for e,c in zip(ssbond,ssbond_ch)]
183 return seq,json.dumps(ssbond)
189 tasks = Task.objects.filter(owner=user).order_by('-created_date')
191 tasks_count = Task.objects.filter(owner=user).count()
192 return render(request, "index.html", {
193 'tasks': tasks, 'alldone': 0, 'tasks_count':tasks_count
198 if request.method == 'POST':
199 form = TaskForm(request.POST)
201 name = form.cleaned_data["name"]
203 task = Task(name=name,owner=user,ready=False)
205 return redirect('add_min',task_id=task.id)
209 def add_min(request,task_id):
210 task = get_object_or_404(Task, id=task_id)
211 if request.method == 'POST':
212 if '_example' in request.POST:
213 data= {'name':task.name,'pdbid':'1BDD'}
214 form = TaskForm_min(initial=data)
216 form = TaskForm_min(request.POST,request.FILES)
218 task.name=form.cleaned_data["name"]
220 pdbid=form.cleaned_data["pdbid"]
222 basename = str(task.owner)
223 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
224 task.jobdirname = "_".join([basename, suffix])
227 task.myfile1=load_pdbid(pdbid,task.jobdirname)
230 task.myfile1=form.cleaned_data["file1"]
232 seq,task.ssbond=from_pdb(task.myfile1)
234 for i in range(0,len(seq),40):
235 task.md_seq=task.md_seq+seq[i:i+40]+" "
240 if is_lazy_user(request.user):
241 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
245 data= {'name':task.name}
246 form = TaskForm_min(initial=data)
247 p_type='minimization'
249 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
252 def add_min_a(request,task_id):
253 task = get_object_or_404(Task, id=task_id)
254 if request.method == 'POST':
255 if '_example' in request.POST:
256 data= {'name':task.name,'pdbid':'1EI0','unres_ff':'opt-wtfsa-2'}
257 form = TaskForm_min_a(initial=data)
259 form = TaskForm_min_a(request.POST,request.FILES)
261 task.name=form.cleaned_data["name"]
263 # task.min_choice=form.cleaned_data["min_choice"]
264 task.min_overlap=form.cleaned_data["min_overlap"]
265 task.min_searchsc=form.cleaned_data["min_searchsc"]
266 task.min_maxmin=form.cleaned_data["min_maxmin"]
267 task.min_maxfun=form.cleaned_data["min_maxfun"]
268 task.min_pdbout=form.cleaned_data["min_pdbout"]
270 basename = str(task.owner)
271 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
272 task.jobdirname = "_".join([basename, suffix])
274 pdbid=form.cleaned_data["pdbid"]
276 task.myfile1=load_pdbid(pdbid,task.jobdirname)
279 task.myfile1=form.cleaned_data["file1"]
281 task.min_unres_pdb=form.cleaned_data["min_unres_pdb"]
282 task.unres_ff=form.cleaned_data["unres_ff"]
283 task.boxx=form.cleaned_data["boxx"]
284 task.boxy=form.cleaned_data["boxy"]
285 task.boxz=form.cleaned_data["boxz"]
287 seq,task.ssbond=from_pdb(task.myfile1)
289 for i in range(0,len(seq),40):
290 task.md_seq=task.md_seq+seq[i:i+40]+" "
295 if is_lazy_user(request.user):
296 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
300 data= {'name':task.name}
301 form = TaskForm_min_a(initial=data)
303 p_type='minimization - advanced options'
304 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
307 def add_md(request,task_id):
308 task = get_object_or_404(Task, id=task_id)
309 if request.method == 'POST':
310 if '_example' in request.POST:
311 data= {'name':task.name,'pdbid':'1IGD','md_start':'pdbstart',
312 'md_pdbref':True,'md_temp':200,'md_seed':-39912345}
313 form = TaskForm_md(initial=data)
315 form = TaskForm_md(request.POST,request.FILES)
317 task.name=form.cleaned_data["name"]
319 task.md_seed=form.cleaned_data["md_seed"]
320 task.md_start=form.cleaned_data["md_start"]
321 task.md_temp=form.cleaned_data["md_temp"]
322 task.md_nstep=form.cleaned_data["md_nstep"]
323 task.md_total_steps=task.md_nstep
324 if task.md_nstep<250000:
327 basename = str(task.owner)
328 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
329 task.jobdirname = "_".join([basename, suffix])
331 pdbid=form.cleaned_data["pdbid"]
333 task.myfile1=load_pdbid(pdbid,task.jobdirname)
336 task.myfile1=form.cleaned_data["file1"]
337 task.md_pdbref=form.cleaned_data["md_pdbref"]
340 if task.md_start == "pdbstart" or task.md_pdbref:
341 seq,task.ssbond=from_pdb(task.myfile1)
343 seq=seq_add_x(form.cleaned_data["md_seq"])
345 for i in range(0,len(seq),40):
346 task.md_seq=task.md_seq+seq[i:i+40]+" "
348 if task.md_start != "pdbstart":
351 if any(c.islower() for c in seq):
358 if is_lazy_user(request.user):
359 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
363 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
364 form = TaskForm_md(initial=data)
366 p_type='molecular dynamics'
367 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
370 def add_md_a(request,task_id):
371 task = get_object_or_404(Task, id=task_id)
372 if request.method == 'POST':
373 if '_example' in request.POST:
374 data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf',
375 'md_pdbref':True,'md_mdpdb':True,'md_seed':-39912345}
376 form = TaskForm_md_a(initial=data)
378 form = TaskForm_md_a(request.POST,request.FILES)
380 task.name=form.cleaned_data["name"]
383 basename = str(task.owner)
384 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
385 task.jobdirname = "_".join([basename, suffix])
387 pdbid=form.cleaned_data["pdbid"]
389 task.myfile1=load_pdbid(pdbid,task.jobdirname)
392 task.myfile1=form.cleaned_data["file1"]
393 task.md_start=form.cleaned_data["md_start"]
394 task.md_pdbref=form.cleaned_data["md_pdbref"]
397 if task.md_start == "pdbstart" or task.md_pdbref:
398 seq,task.ssbond=from_pdb(task.myfile1)
399 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
401 seq=seq_add_x(form.cleaned_data["md_seq"])
402 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
404 for i in range(0,len(seq),40):
405 task.md_seq=task.md_seq+seq[i:i+40]+" "
407 if task.md_start != "pdbstart":
410 task.md_seed=form.cleaned_data["md_seed"]
412 task.md_temp=form.cleaned_data["md_temp"]
413 task.md_nstep=form.cleaned_data["md_nstep"]
414 task.md_total_steps=task.md_nstep
415 task.md_ntwe=form.cleaned_data["md_ntwe"]
416 task.md_ntwx=form.cleaned_data["md_ntwx"]
417 task.md_dt=form.cleaned_data["md_dt"]
418 task.md_lang=form.cleaned_data["md_lang"]
419 task.md_tau=form.cleaned_data["md_tau"]
420 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
421 task.md_mdpdb=form.cleaned_data["md_mdpdb"]
422 task.unres_ff=form.cleaned_data["unres_ff"]
423 task.md_respa=form.cleaned_data["md_respa"]
424 if any(c.islower() for c in seq):
427 task.boxx=form.cleaned_data["boxx"]
428 task.boxy=form.cleaned_data["boxy"]
429 task.boxz=form.cleaned_data["boxz"]
435 if is_lazy_user(request.user):
436 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
440 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
441 form = TaskForm_md_a(initial=data)
443 p_type='molecular dynamics - advanced options'
444 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
447 def add_remd(request,task_id):
448 task = get_object_or_404(Task, id=task_id)
449 if request.method == 'POST':
450 if '_example' in request.POST:
451 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
452 form = TaskForm_remd(initial=data)
454 form = TaskForm_remd(request.POST,request.FILES)
456 task.name=form.cleaned_data["name"]
458 task.md_start=form.cleaned_data["md_start"]
460 basename = str(task.owner)
461 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
462 task.jobdirname = "_".join([basename, suffix])
464 pdbid=form.cleaned_data["pdbid"]
466 task.myfile1=load_pdbid(pdbid,task.jobdirname)
469 task.myfile1=form.cleaned_data["file1"]
470 task.md_pdbref=form.cleaned_data["md_pdbref"]
471 task.md_ntwx=task.remd_nstex
474 if task.md_start == "pdbstart" or task.md_pdbref:
475 seq,task.ssbond=from_pdb(task.myfile1)
477 seq=seq_add_x(form.cleaned_data["md_seq"])
478 for i in range(0,len(seq),40):
479 task.md_seq=task.md_seq+seq[i:i+40]+" "
481 if task.md_start != "pdbstart":
484 task.md_seed=form.cleaned_data["md_seed"]
486 task.md_nstep=form.cleaned_data["md_nstep"]
487 task.md_total_steps=task.md_nstep
489 if any(c.islower() for c in seq):
498 if is_lazy_user(request.user):
499 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
503 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
504 form = TaskForm_remd(initial=data)
506 p_type='replica exchange molecular dynamics'
507 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
510 def add_remd_a(request,task_id):
511 from django.core.files.uploadedfile import UploadedFile
512 task = get_object_or_404(Task, id=task_id)
513 if request.method == 'POST':
514 if '_example' in request.POST:
515 data= {'name':task.name,'pdbid':'5G3Q:B','md_pdbref':True,
516 'md_nstep':2000000,'md_lang':'berendsen','unres_ff':'FF2','md_seed':-39912345,
517 'remd_cluter_temp':290,'md_2d':'--EEEEEEE------EEEEEE------EEEEEE------HHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHH---'}
518 form = TaskForm_remd_a(initial=data)
519 task.example='casp12'
521 elif '_example_saxs' in request.POST:
522 data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True,
523 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
524 'remd_cluter_temp':270,
525 'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
563 form = TaskForm_remd_a(initial=data)
564 elif '_example_saxs1' in request.POST:
565 data= {'name':task.name,'pdbid':'2KMS','md_pdbref':True,'md_start':'pdbstart',
566 'md_2d':'----EEEEEE-EEEEE-------EEEEEEEEE--EEEEEE-EEEE---EEEEEEEEE-----EEEEEEE-EEE-HHHHH-EEEE-EEEEEEEEE----EEEEEE---EEE-----',
567 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
568 'remd_cluter_temp':280, 'min_maxfun':50,
569 'scal_rad':5.0,'wsaxs':1000.0,'saxs_data':
570 """0.7100E-00 0.2036E-03
571 0.1420E+01 0.4221E-03
572 0.2130E+01 0.6548E-03
573 0.2840E+01 0.9001E-03
574 0.3550E+01 0.1156E-02
575 0.4260E+01 0.1421E-02
576 0.4970E+01 0.1692E-02
577 0.5680E+01 0.1965E-02
578 0.6390E+01 0.2239E-02
579 0.7100E+01 0.2509E-02
580 0.7810E+01 0.2772E-02
581 0.8520E+01 0.3025E-02
582 0.9230E+01 0.3265E-02
583 0.9940E+01 0.3489E-02
584 0.1065E+02 0.3694E-02
585 0.1136E+02 0.3878E-02
586 0.1207E+02 0.4039E-02
587 0.1278E+02 0.4177E-02
588 0.1349E+02 0.4289E-02
589 0.1420E+02 0.4377E-02
590 0.1491E+02 0.4439E-02
591 0.1562E+02 0.4478E-02
592 0.1633E+02 0.4493E-02
593 0.1704E+02 0.4487E-02
594 0.1775E+02 0.4461E-02
595 0.1846E+02 0.4418E-02
596 0.1917E+02 0.4361E-02
597 0.1988E+02 0.4291E-02
598 0.2059E+02 0.4211E-02
599 0.2130E+02 0.4125E-02
600 0.2201E+02 0.4034E-02
601 0.2272E+02 0.3942E-02
602 0.2343E+02 0.3850E-02
603 0.2414E+02 0.3761E-02
604 0.2485E+02 0.3677E-02
605 0.2556E+02 0.3598E-02
606 0.2627E+02 0.3526E-02
607 0.2698E+02 0.3462E-02
608 0.2769E+02 0.3405E-02
609 0.2840E+02 0.3356E-02
610 0.2911E+02 0.3315E-02
611 0.2982E+02 0.3280E-02
612 0.3053E+02 0.3251E-02
613 0.3124E+02 0.3226E-02
614 0.3195E+02 0.3205E-02
615 0.3266E+02 0.3186E-02
616 0.3337E+02 0.3167E-02
617 0.3408E+02 0.3147E-02
618 0.3479E+02 0.3125E-02
619 0.3550E+02 0.3099E-02
620 0.3621E+02 0.3068E-02
621 0.3692E+02 0.3031E-02
622 0.3763E+02 0.2987E-02
623 0.3834E+02 0.2937E-02
624 0.3905E+02 0.2878E-02
625 0.3976E+02 0.2812E-02
626 0.4047E+02 0.2739E-02
627 0.4118E+02 0.2658E-02
628 0.4189E+02 0.2571E-02
629 0.4260E+02 0.2478E-02
630 0.4331E+02 0.2381E-02
631 0.4402E+02 0.2279E-02
632 0.4473E+02 0.2174E-02
633 0.4544E+02 0.2068E-02
634 0.4615E+02 0.1960E-02
635 0.4686E+02 0.1853E-02
636 0.4757E+02 0.1748E-02
637 0.4828E+02 0.1644E-02
638 0.4899E+02 0.1544E-02
639 0.4970E+02 0.1447E-02
640 0.5041E+02 0.1355E-02
641 0.5112E+02 0.1267E-02
642 0.5183E+02 0.1184E-02
643 0.5254E+02 0.1106E-02
644 0.5325E+02 0.1033E-02
645 0.5396E+02 0.9646E-03
646 0.5467E+02 0.9008E-03
647 0.5538E+02 0.8411E-03
648 0.5609E+02 0.7852E-03
649 0.5680E+02 0.7327E-03
650 0.5751E+02 0.6831E-03
651 0.5822E+02 0.6360E-03
652 0.5893E+02 0.5909E-03
653 0.5964E+02 0.5475E-03
654 0.6035E+02 0.5055E-03
655 0.6106E+02 0.4646E-03
656 0.6177E+02 0.4245E-03
657 0.6248E+02 0.3853E-03
658 0.6319E+02 0.3467E-03
659 0.6390E+02 0.3089E-03
660 0.6461E+02 0.2719E-03
661 0.6532E+02 0.2357E-03
662 0.6603E+02 0.2007E-03
663 0.6674E+02 0.1669E-03
664 0.6745E+02 0.1345E-03
665 0.6816E+02 0.1038E-03
666 0.6887E+02 0.7482E-04
667 0.6958E+02 0.4782E-04
668 0.7029E+02 0.2286E-04"""}
669 form = TaskForm_remd_a(initial=data)
671 form = TaskForm_remd_a(request.POST,request.FILES)
673 task.name=form.cleaned_data["name"]
676 basename = str(task.owner)
677 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
678 task.jobdirname = "_".join([basename, suffix])
680 pdbid=form.cleaned_data["pdbid"]
682 task.myfile1=load_pdbid(pdbid,task.jobdirname)
685 task.myfile1=form.cleaned_data["file1"]
686 task.md_start=form.cleaned_data["md_start"]
687 task.md_pdbref=form.cleaned_data["md_pdbref"]
690 if task.md_start == "pdbstart" or task.md_pdbref:
691 seq,task.ssbond=from_pdb(task.myfile1)
692 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
694 seq=seq_add_x(form.cleaned_data["md_seq"])
695 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
697 for i in range(0,len(seq),40):
698 task.md_seq=task.md_seq+seq[i:i+40]+" "
700 if task.md_start != "pdbstart":
703 task.md_seed=form.cleaned_data["md_seed"]
704 task.md_nstep=form.cleaned_data["md_nstep"]
705 task.md_total_steps=task.md_nstep
706 task.md_dt=form.cleaned_data["md_dt"]
707 task.md_lang=form.cleaned_data["md_lang"]
708 task.md_tau=form.cleaned_data["md_tau"]
709 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
710 task.min_maxfun=form.cleaned_data["min_maxfun"]
711 task.remd_nrep=form.cleaned_data["remd_nrep"]
712 task.remd_nstex=form.cleaned_data["remd_nstex"]
713 task.md_ntwx=form.cleaned_data["md_ntwx"]
714 task.md_ntwe=form.cleaned_data["md_ntwe"]
715 task.md_respa=form.cleaned_data["md_respa"]
716 if any(c.islower() for c in seq):
720 # task.remd_traj1file=form.cleaned_data["remd_traj1file"]
721 # task.remd_rest1file=form.cleaned_data["remd_rest1file"]
723 task.boxx=form.cleaned_data["boxx"]
724 task.boxy=form.cleaned_data["boxy"]
725 task.boxz=form.cleaned_data["boxz"]
727 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
728 task.unres_ff=form.cleaned_data["unres_ff"]
730 task.scal_rad = form.cleaned_data["scal_rad"]
731 task.saxs_data = form.cleaned_data["saxs_data"]
732 task.wsaxs = form.cleaned_data["wsaxs"]
735 return redirect('addmlist',task_id=task.id)
737 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
738 form = TaskForm_remd_a(initial=data)
740 p_type='replica exchange molecular dynamics - advanced options'
741 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
744 def add_dock(request,task_id):
745 task = get_object_or_404(Task, id=task_id)
746 if request.method == 'POST':
747 if '_example' in request.POST:
748 data= {'name':task.name,'pdbid':'1BON:A','pdbid2':'1BON:B','md_seed':-12396738,'md_nstep':500000}
749 form = TaskForm_dock(initial=data)
751 form = TaskForm_dock(request.POST,request.FILES)
753 task.name=form.cleaned_data["name"]
756 basename = str(task.owner)
757 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
758 task.jobdirname = "_".join([basename, suffix])
760 pdbid=form.cleaned_data["pdbid"]
762 task.myfile1=load_pdbid(pdbid,task.jobdirname)
765 task.myfile1=form.cleaned_data["file1"]
767 pdbid2=form.cleaned_data["pdbid2"]
769 task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
771 seq2,ssbond2=from_pdb(task.myfile2)
773 task.myfile2=form.cleaned_data["file2"]
775 seq2=seq_add_x(form.cleaned_data["md_seq"])
778 seq2,ssbond2=from_pdb(task.myfile2)
780 task.md_ntwx=task.remd_nstex
781 task.md_start="pdbstart"
782 task.remd_multi_m='["3", "3", "3", "3", "3", "3", "3", "3"]'
783 if task.md_seq2 =='':
787 task.dock_peptide=form.cleaned_data["dock_peptide"]
791 seq1,ssbond1=from_pdb(task.myfile1)
794 if seq1[-1]=='X' and seq2[0]=='X':
796 elif seq1[-1]!='X' and seq2[0]!='X':
801 for i in range(0,len(seq),40):
802 task.md_seq=task.md_seq+seq[i:i+40]+" "
804 task.md_seed=form.cleaned_data["md_seed"]
806 task.md_nstep=form.cleaned_data["md_nstep"]
807 task.md_total_steps=task.md_nstep
809 if any(c.islower() for c in seq):
813 box1=dock_box(task.myfile1)
815 box2=dock_box(task.myfile2)
817 box2=len(task.md_seq2)*2.0
818 task.boxx=(box1+box2)*1.2+20
819 task.boxy=(box1+box2)*1.2+20
820 task.boxz=(box1+box2)*1.2+20
827 if is_lazy_user(request.user):
828 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
832 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
833 form = TaskForm_dock(initial=data)
836 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
839 def add_dock_a(request,task_id):
840 task = get_object_or_404(Task, id=task_id)
841 if request.method == 'POST':
842 if '_example' in request.POST:
843 data= {'name':task.name,'pdbid':'2HPL:A','md_seq':'DDLYG','dock_peptide':True,'md_seed':-39912345,'md_nstep':600000}
844 form = TaskForm_dock_a(initial=data)
845 task.example='dock_peptide'
848 form = TaskForm_dock_a(request.POST,request.FILES)
850 task.name=form.cleaned_data["name"]
853 basename = str(task.owner)
854 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
855 task.jobdirname = "_".join([basename, suffix])
857 pdbid=form.cleaned_data["pdbid"]
859 task.myfile1=load_pdbid(pdbid,task.jobdirname)
862 task.myfile1=form.cleaned_data["file1"]
864 pdbid2=form.cleaned_data["pdbid2"]
866 task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
868 seq2,ssbond2=from_pdb(task.myfile2)
870 task.myfile2=form.cleaned_data["file2"]
872 seq2=seq_add_x(form.cleaned_data["md_seq"])
875 seq2,ssbond2=from_pdb(task.myfile2)
878 task.md_ntwx=task.remd_nstex
879 task.md_start="pdbstart"
880 if task.md_seq2 =='':
884 task.dock_peptide=form.cleaned_data["dock_peptide"]
888 seq1,ssbond1=from_pdb(task.myfile1)
890 if seq1[-1]=='X' and seq2[0]=='X':
892 elif seq1[-1]!='X' and seq2[0]!='X':
897 for i in range(0,len(seq),40):
898 task.md_seq=task.md_seq+seq[i:i+40]+" "
900 task.md_seed=form.cleaned_data["md_seed"]
902 task.md_nstep=form.cleaned_data["md_nstep"]
903 task.md_total_steps=task.md_nstep
905 task.md_dt=form.cleaned_data["md_dt"]
906 task.md_lang=form.cleaned_data["md_lang"]
907 task.md_tau=form.cleaned_data["md_tau"]
908 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
909 task.min_maxfun=form.cleaned_data["min_maxfun"]
910 task.remd_nrep=form.cleaned_data["remd_nrep"]
911 task.remd_nstex=form.cleaned_data["remd_nstex"]
912 task.md_ntwx=form.cleaned_data["md_ntwx"]
913 task.md_ntwe=form.cleaned_data["md_ntwe"]
915 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
916 task.remd_cluster_n=form.cleaned_data["remd_cluster_n"]
917 task.unres_ff=form.cleaned_data["unres_ff"]
919 if any(c.islower() for c in seq):
923 box1=dock_box(task.myfile1)
925 box2=dock_box(task.myfile2)
927 box2=len(task.md_seq2)*2.0
928 task.boxx=(box1+box2)*1.2+20
929 task.boxy=(box1+box2)*1.2+20
930 task.boxz=(box1+box2)*1.2+20
933 return redirect('addmlist',task_id=task.id)
936 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
937 form = TaskForm_dock_a(initial=data)
939 p_type='docking - advanced options'
940 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
945 def addmlist(request,task_id):
946 task = get_object_or_404(Task, id=task_id)
947 if request.method == 'POST':
948 form = TaskForm_list(task.remd_nrep,request.POST)
950 task.remd_multi_t=form.cleaned_data["temperatures"]
951 task.remd_multi_m=form.cleaned_data["multiplexing"]
955 if is_lazy_user(request.user):
956 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
960 if task.example == 'casp12':
961 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
962 '["2", "2", "2", "2", "2", "2", "2", "2"]',
964 '["270", "280", "290", "300", "310", "320", "330", "340"]'
966 elif task.example == 'dock_peptide':
967 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
968 '["4", "8", "4", "4", "4", "4", "4", "4"]',
970 '["270", "280", "290", "300", "310", "320", "330", "345"]'
972 elif task.unres_ff == 'FF2':
973 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
974 '["1", "1", "1", "1", "1", "1", "1", "1"]',
976 '["270", "280", "290", "300", "310", "320", "330", "345"]'
979 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
980 '["1", "1", "1", "1", "1", "1", "1", "1"]',
982 '["250", "260", "270", "280", "290", "300", "315", "330"]'
985 form = TaskForm_list(task.remd_nrep,initial=data)
986 p_type='replica exchange molecular dynamics - advanced options'
987 return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
990 def details(request,task_id):
991 task = get_object_or_404(Task, id=task_id)
993 remd_models=json.loads(task.remd_models)
996 remd_models.append(task.remd_model1)
997 remd_models.append(task.remd_model2)
998 remd_models.append(task.remd_model3)
999 remd_models.append(task.remd_model4)
1000 remd_models.append(task.remd_model5)
1001 return render(request, "details.html",{'task':task,'remd_models':remd_models,'range':range(1,task.remd_cluster_n+1)})
1004 def details1(request,user_id,task_id):
1005 task = get_object_or_404(Task, id=task_id)
1007 remd_models=json.loads(task.remd_models)
1010 remd_models.append(task.remd_model1)
1011 remd_models.append(task.remd_model2)
1012 remd_models.append(task.remd_model3)
1013 remd_models.append(task.remd_model4)
1014 remd_models.append(task.remd_model5)
1015 return render(request, "details1.html",{'task':task,'remd_models':remd_models,'range':range(1,task.remd_cluster_n+1)})
1019 def delete(request, task_id):
1020 Task.objects.get(id=task_id).delete()
1021 return redirect('/')
1024 def restart(request, task_id):
1025 task = get_object_or_404(Task, id=task_id)
1027 return redirect('/')
1029 def add_restart_inp():
1030 with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
1032 if 'reset_vel=' in line:
1033 f2.write('{:79}'.format('restart'+line[7:]))
1036 os.remove('file.inp')
1037 os.rename('file.inp.tmp','file.inp')
1041 if os.path.isfile(task.jobdirname+'/finished'):
1042 os.remove(task.jobdirname+'/finished')
1045 task.md_total_steps = task.md_total_steps+task.md_nstep
1047 if task.type == 'md':
1048 os.chdir(task.jobdirname)
1050 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
1052 elif task.type == 'remd' or task.type == 'dock':
1053 os.chdir(task.jobdirname)
1055 tmp1=json.loads(task.remd_multi_m)
1056 nreplicas=sum(map(int, tmp1))
1057 with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
1059 if 'rec_end=' in line:
1060 rec=task.md_total_steps/task.md_ntwx
1061 f2.write('nfile_cx=1 rec_start='+str(rec/10)
1062 +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
1063 elif 'isampl=' in line:
1064 if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
1067 isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
1068 f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
1071 os.remove('file_wham.inp')
1072 os.rename('file_wham.tmp','file_wham.inp')
1073 if task.type == 'dock':
1074 with open('pbs8.csh','r') as f1, open ('pbs8.tmp','w') as f2:
1076 if 'generator_v13' in line:
1080 os.remove('pbs8.csh')
1081 os.rename('pbs8.tmp','pbs8.csh')
1082 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
1086 def restart1(request, user_id, task_id):
1087 task = get_object_or_404(Task, id=task_id)
1090 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1093 def refresh_done1(request, task_id):
1094 task = get_object_or_404(Task, id=task_id)
1098 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1101 for line in proc.stdout:
1102 if 'piasek4' in line:
1103 if line.split()[1]=='test_server':
1105 if line.split()[-2]=='Q':
1107 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1109 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1113 def refresh_done(request):
1115 tasks = Task.objects.filter(owner=user).order_by('-created_date')
1116 tasks_count = Task.objects.filter(owner=user).count()
1123 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1126 for line in proc.stdout:
1127 if 'piasek4' in line:
1128 if line.split()[1]=='test_server':
1130 if line.split()[-2]=='Q':
1132 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1134 if is_lazy_user(request.user):
1135 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1137 return render(request, "index.html", {
1139 'variable' : variable,
1141 'tasks_count':tasks_count
1145 def refresh_done0(task):
1146 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
1149 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1151 if task.type=='min' or task.type=='md':
1155 task.etot=line.split()[1]
1157 if 'RMS deviation' in line:
1165 if 'Total wall' in line:
1168 elif task.type=='remd' or task.type=='dock':
1170 text="Acceptance for replica exchanges and number of exchange attempts\n"
1175 text=text+' '.join(line.split()[2:])+"\n"
1176 if j==task.remd_nrep:
1178 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
1180 if 'Total wall' in line:
1183 task.results_text=text
1187 if task.md_pdbref and task.type=='remd' or task.type=='dock' and task.md_seq2 == '':
1189 for i in range(1,task.remd_cluster_n+1):
1191 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
1193 remd_models.append('Cluster'+str(i)+' '+' '.join(line.split()[-3:]))
1194 except EnvironmentError:
1195 print 'file_wham_T*pdb open error'
1196 for i in range(1,task.remd_cluster_n+1):
1197 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1200 if 'RMSD of the common residues=' in line:
1201 text=' RMSD='+line.split()[5]
1202 if 'TM-score =' in line:
1203 text=text+' TMscore='+line.split()[2]
1204 if 'GDT-TS-score=' in line:
1205 text=text+' GDT_TS='+line.split()[1]
1207 remd_models[i-1]=remd_models[i-1]+text
1209 if task.type=='dock':
1210 for i in range(1,task.remd_cluster_n+1):
1211 with open(task.jobdirname+'/dockq_'+str(i)+'.out', 'r') as f:
1215 text=' Fnat='+line.split()[1]
1217 text=text+' iRMS='+line.split()[1]
1219 text=text+' LRMS='+line.split()[1]
1220 if 'CAPRI' in line and not 'DockQ_CAPRI' in line:
1221 text=text+' CAPRI='+line.split()[1]
1222 if 'DockQ_CAPRI' in line:
1223 text=text+' DockQ_CAPRI= '+line.split()[1]
1224 if 'DockQ ' in line:
1225 text=text+' DockQ='+line.split()[1]
1227 remd_models[i-1]=remd_models[i-1]+text
1228 # logger.warning("models %d %s" % (i,remd_models))
1230 if task.type=='remd' or task.type=='dock':
1231 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1234 if 'sumprob' in line:
1238 if i>task.remd_cluster_n:
1241 remd_models[i-1]=remd_models[i-1]+' Cluster'+str(i)+' probability= '+line1.split()[-2]
1243 if len(line1.split())==4:
1244 remd_models.append(' Cluster'+str(i)+' probability= '+line1.split()[-2])
1246 task.remd_models=json.dumps(remd_models)
1247 # logger.warning("models%s" % task.remd_models)
1249 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1250 if (task.type=='min'):
1252 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1257 last = line.split()[0]
1261 task.running=int(1+int(last)*100.0/task.min_maxmin)
1264 if task.running>100:
1267 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1272 last = line.split()[0]
1275 task.running=int(1+int(last)*100.0/task.md_nstep)
1276 if task.running>100:
1284 def zip_all_files(request, task_id):
1286 from django.http import HttpResponse
1287 from wsgiref.util import FileWrapper
1288 from django.core.files.temp import NamedTemporaryFile
1290 task = get_object_or_404(Task, id=task_id)
1292 temp=NamedTemporaryFile()
1293 archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
1294 for (dirpath, dirnames, filenames) in os.walk(task.jobdirname):
1295 for file1 in filenames:
1296 archive.write(dirpath+"/"+file1,file1)
1299 wrapper = FileWrapper(temp)
1300 response = HttpResponse(wrapper, content_type='application/zip')
1301 response['Content-Disposition'] = 'attachment; filename=all.zip'