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
9 from django.core.files import File
13 from lazysignup.decorators import allow_lazy_user
14 from lazysignup.utils import is_lazy_user
19 logger = logging.getLogger(__name__)
22 # 20 canonical amino acids
23 ('CYS', 'C'), ('ASP', 'D'), ('SER', 'S'), ('GLN', 'Q'),
24 ('LYS', 'K'), ('ILE', 'I'), ('PRO', 'P'), ('THR', 'T'),
25 ('PHE', 'F'), ('ASN', 'N'), ('GLY', 'G'), ('HIS', 'H'),
26 ('LEU', 'L'), ('ARG', 'R'), ('TRP', 'W'), ('ALA', 'A'),
27 ('VAL', 'V'), ('GLU', 'E'), ('TYR', 'Y'), ('MET', 'M'),
28 ('HSD', 'H'),('HSE', 'H'),('HSP', 'H'),
29 ('HIE', 'H'), ('HID', 'H'),('HIP', 'H'),
31 ('DCY', 'c'), ('DAS', 'd'), ('DSN', 's'), ('DGN', 'q'),
32 ('DLY', 'k'), ('DIL', 'i'), ('DPR', 'p'), ('DTH', 't'),
33 ('DPN', 'f'), ('DSG', 'n'), ('DHI', 'h'),
34 ('DLE', 'l'), ('DAR', 'r'), ('DTR', 'w'), ('DAL', 'a'),
35 ('DVA', 'v'), ('DGL', 'e'), ('DTY', 'y'), ('MED', 'm'),
38 three_to_one = dict(res_codes)
44 if line[0:6] == 'ATOM ' and line[13:15] == 'CA':
48 coord.append([x, y, z])
49 if line[0:3] == 'END':
54 for j in xrange(i+1,l):
57 d=(p1[0]-p2[0])**2 + (p1[1]-p2[1])**2 + (p1[2]-p2[2])**2
60 return math.sqrt(maxd)
63 def load_pdbid(pdbid,dirname,filename='plik.pdb'):
64 if (not os.path.isdir(dirname)):
67 file,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
72 pdb_tmp=urllib.urlopen('http://files.rcsb.org/download/'+pdbid+'.pdb')
73 with open(dirname+'/'+filename, 'w') as outfile:
75 if line[0:6] == 'SSBOND' and line[15] == chain and line[29] == chain:
77 if line[0:6] == 'ATOM ' and line[21] == chain:
79 if line[0:6] == 'ENDMDL':
82 file=dirname+'/'+filename
87 def seq_2d_from_pdb(seq_2d,seq):
90 seq_2d=seq_2d.replace('C', '-')
93 for i in range(0,len(seq)):
95 seq_2d_tmp=seq_2d_tmp+'-'
98 seq_2d_tmp=seq_2d_tmp+seq_2d[ii]
101 for i in range(0,len(seq_2d_tmp),40):
102 tmp=tmp+seq_2d_tmp[i:i+40]+" "
105 def seq_2d_add_x(seq_2d,seq,seq_form):
108 seq_2d=seq_2d[:len(seq_form)]
109 seq_2d=seq_2d.replace('C', '-')
110 if seq_form[0] !='X' and seq[0] == 'X':
112 if seq_form[-1] !='X' and seq[-1] == 'X':
114 seq_2d=seq_2d[:len(seq)]
116 for i in range(0,len(seq_2d),40):
117 tmp=tmp+seq_2d[i:i+40]+" "
120 def seq_add_x(sequence):
121 if sequence[0] != 'G' and sequence[0] != 'g' and sequence[0] != 'X':
122 sequence='X'+sequence
123 if sequence[-1] != 'G' and sequence[-1] != 'g' and sequence[-1] != 'X':
124 sequence=sequence+'X'
125 set ='CDSQKIPTFNGHLRWAVEYMXcdsqkiptfnhlrwaveym'
126 sequence = ''.join([c for c in sequence if c in set])
142 if line[0:6] == 'ATOM ' and line[13:15] == 'CA':
143 aa = three_to_one.get(line[17:20])
146 if newchain or i!=ires[-1]:
151 chain_sorted.extend(ch)
153 if line[0:3] == 'TER' and i != '':
154 sequence.append('XX')
157 if line[0:6] == 'SSBOND':
159 b.append(int(line[17:21]))
160 b.append(int(line[31:35]))
163 c.append((line[15:16]))
164 c.append((line[29:30]))
166 if line[0:3] == 'END':
168 if not sequence[-1] == 'XX':
170 while sequence[-1] == 'XX':
172 if sequence[0] != 'G':
173 sequence.insert(0,'X')
174 ssbond=[ [e[0]+1,e[1]+1] for e in ssbond]
175 if sequence[-1] != 'G':
177 seq=''.join(sequence)
179 # ssbond=[ [e[0]-ires[0]+1,e[1]-ires[0]+1] for e in ssbond]
181 for c in chain_sorted:
182 unres_shift[c]=i+chain_start[c]
183 i=i-(chain_end[c]-chain_start[c])-3
184 ssbond=[ [e[0]-unres_shift[c[0]]+1,e[1]-unres_shift[c[1]]+1] for e,c in zip(ssbond,ssbond_ch)]
186 return seq,json.dumps(ssbond)
199 tasks = Task.objects.filter(owner=user).order_by('-created_date')
201 tasks_count = Task.objects.filter(owner=user).count()
202 return render(request, "index.html", {
203 'tasks': tasks, 'alldone': 0, 'tasks_count':tasks_count
208 if request.method == 'POST':
209 form = TaskForm(request.POST)
211 name = form.cleaned_data["name"]
213 task = Task(name=name,owner=user,ready=False)
215 return redirect('add_min',task_id=task.id)
219 def add_min(request,task_id):
220 task = get_object_or_404(Task, id=task_id)
221 if request.method == 'POST':
222 if '_example' in request.POST:
223 data= {'name':task.name,'pdbid':'1BDD'}
224 form = TaskForm_min(initial=data)
226 form = TaskForm_min(request.POST,request.FILES)
228 task.name=form.cleaned_data["name"]
230 pdbid=form.cleaned_data["pdbid"]
232 basename = str(task.owner)
233 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
234 task.jobdirname = "_".join([basename, suffix])
237 task.myfile1=load_pdbid(pdbid,task.jobdirname)
240 task.myfile1=form.cleaned_data["file1"]
242 seq,task.ssbond=from_pdb(task.myfile1)
244 for i in range(0,len(seq),40):
245 task.md_seq=task.md_seq+seq[i:i+40]+" "
250 if is_lazy_user(request.user):
251 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
255 data= {'name':task.name}
256 form = TaskForm_min(initial=data)
257 p_type='minimization'
259 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
262 def add_min_a(request,task_id):
263 task = get_object_or_404(Task, id=task_id)
264 if request.method == 'POST':
265 if '_example' in request.POST:
266 data= {'name':task.name,'pdbid':'1EI0','unres_ff':'opt-wtfsa-2'}
267 form = TaskForm_min_a(initial=data)
269 form = TaskForm_min_a(request.POST,request.FILES)
271 task.name=form.cleaned_data["name"]
273 # task.min_choice=form.cleaned_data["min_choice"]
274 task.min_overlap=form.cleaned_data["min_overlap"]
275 task.min_searchsc=form.cleaned_data["min_searchsc"]
276 task.min_maxmin=form.cleaned_data["min_maxmin"]
277 task.min_maxfun=form.cleaned_data["min_maxfun"]
278 task.min_pdbout=form.cleaned_data["min_pdbout"]
280 basename = str(task.owner)
281 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
282 task.jobdirname = "_".join([basename, suffix])
284 pdbid=form.cleaned_data["pdbid"]
286 task.myfile1=load_pdbid(pdbid,task.jobdirname)
289 task.myfile1=form.cleaned_data["file1"]
291 task.min_unres_pdb=form.cleaned_data["min_unres_pdb"]
292 task.unres_ff=form.cleaned_data["unres_ff"]
293 task.boxx=form.cleaned_data["boxx"]
294 task.boxy=form.cleaned_data["boxy"]
295 task.boxz=form.cleaned_data["boxz"]
297 seq,task.ssbond=from_pdb(task.myfile1)
299 for i in range(0,len(seq),40):
300 task.md_seq=task.md_seq+seq[i:i+40]+" "
305 if is_lazy_user(request.user):
306 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
310 data= {'name':task.name}
311 form = TaskForm_min_a(initial=data)
313 p_type='minimization - advanced options'
314 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
317 def add_md(request,task_id):
318 task = get_object_or_404(Task, id=task_id)
319 if request.method == 'POST':
320 if '_example' in request.POST:
321 data= {'name':task.name,'pdbid':'1IGD','md_start':'pdbstart',
322 'md_pdbref':True,'md_temp':200,'md_seed':-39912345}
323 form = TaskForm_md(initial=data)
325 form = TaskForm_md(request.POST,request.FILES)
327 task.name=form.cleaned_data["name"]
329 task.md_seed=form.cleaned_data["md_seed"]
330 task.md_start=form.cleaned_data["md_start"]
331 task.md_temp=form.cleaned_data["md_temp"]
332 task.md_nstep=form.cleaned_data["md_nstep"]
333 task.md_total_steps=task.md_nstep
334 if task.md_nstep<250000:
337 basename = str(task.owner)
338 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
339 task.jobdirname = "_".join([basename, suffix])
341 pdbid=form.cleaned_data["pdbid"]
343 task.myfile1=load_pdbid(pdbid,task.jobdirname)
346 task.myfile1=form.cleaned_data["file1"]
347 task.md_pdbref=form.cleaned_data["md_pdbref"]
350 if task.md_start == "pdbstart" or task.md_pdbref:
351 seq,task.ssbond=from_pdb(task.myfile1)
353 seq=seq_add_x(form.cleaned_data["md_seq"])
355 for i in range(0,len(seq),40):
356 task.md_seq=task.md_seq+seq[i:i+40]+" "
358 if task.md_start != "pdbstart":
361 if any(c.islower() for c in seq):
368 if is_lazy_user(request.user):
369 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
373 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
374 form = TaskForm_md(initial=data)
376 p_type='molecular dynamics'
377 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
380 def add_md_a(request,task_id):
381 task = get_object_or_404(Task, id=task_id)
382 if request.method == 'POST':
383 if '_example' in request.POST:
384 data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf',
385 'md_pdbref':True,'md_mdpdb':True,'md_seed':-39912345}
386 form = TaskForm_md_a(initial=data)
387 elif '_example_nmr' in request.POST:
388 data= {'name':task.name,'file1':'files/6msp-from-THR.pdb','md_pdbref':True,
389 'md_nstep':20000,'md_lang':'berendsen','unres_ff':'NEWCT-9P','md_seed':-19712641,
390 'boxx':1000,'boxy':1000,'boxz':1000,'use_nmr':True,'file3':'files/N1008_AmbiR-trunc.txt',
391 'md_seq':'TDELLERLRQLFEELHERGTEIVVEVHINGERDEIRVRNISKEELKKLLERIREKIEREGSSEVEVNVHSGGQTWTFNEK'}
392 form = TaskForm_md_a(initial=data)
394 form = TaskForm_md_a(request.POST,request.FILES)
396 task.name=form.cleaned_data["name"]
399 basename = str(task.owner)
400 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
401 task.jobdirname = "_".join([basename, suffix])
404 seq_chk=form.cleaned_data["md_seq"]
406 pdbid=form.cleaned_data["pdbid"]
408 task.myfile1=load_pdbid(pdbid,task.jobdirname)
412 #zastapione linijkami ponizej task.myfile1=form.cleaned_data["file1"]
413 if (seq_chk == 'TDELLERLRQLFEELHERGTEIVVEVHINGERDEIRVRNISKEELKKLLERIREKIEREGSSEVEVNVHSGGQTWTFNEK' and not form.cleaned_data["file1"]):
414 reopn1 = open('files/6msp-from-THR.pdb', 'r')
415 task.myfile1 = File(reopn1)
416 # task.myfile1.name='files/6msp-from-THR.pdb'
419 task.myfile1 = form.cleaned_data["file1"]
421 task.md_start=form.cleaned_data["md_start"]
422 task.md_pdbref=form.cleaned_data["md_pdbref"]
425 if task.md_start == "pdbstart" or task.md_pdbref:
426 seq,task.ssbond=from_pdb(task.myfile1)
427 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
429 seq=seq_add_x(form.cleaned_data["md_seq"])
430 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
432 for i in range(0,len(seq),40):
433 task.md_seq=task.md_seq+seq[i:i+40]+" "
435 if task.md_start != "pdbstart":
439 task.use_nmr=form.cleaned_data["use_nmr"]
440 task.nmr_fordepth=form.cleaned_data["nmr_fordepth"]
441 task.nmr_slope=form.cleaned_data["nmr_slope"]
442 task.nmr_scal=form.cleaned_data["nmr_scal"]
444 if (seq_chk == 'TDELLERLRQLFEELHERGTEIVVEVHINGERDEIRVRNISKEELKKLLERIREKIEREGSSEVEVNVHSGGQTWTFNEK' and not form.cleaned_data["file3"]):
445 reopn = open('files/N1008_AmbiR-trunc.txt', 'r')
446 task.myfile3 = File(reopn)
447 # task.myfile3.name='files/N1008_AmbiR-trunc.txt'
448 task.linijek_nmr=from_nmr(task.myfile3)
451 task.myfile3 = form.cleaned_data["file3"]
452 task.linijek_nmr=from_nmr(form.cleaned_data["file3"])
455 if (seq_chk == 'TDELLERLRQLFEELHERGTEIVVEVHINGERDEIRVRNISKEELKKLLERIREKIEREGSSEVEVNVHSGGQTWTFNEK' and not form.cleaned_data["file1"]):
456 reopn1 = open('files/6msp-from-THR.pdb', 'r')
457 task.myfile1 = File(reopn1)
458 # task.myfile1.name='files/6msp-from-THR.pdb'
461 task.myfile1 = form.cleaned_data["file1"]
464 task.md_seed=form.cleaned_data["md_seed"]
466 task.md_temp=form.cleaned_data["md_temp"]
467 task.md_nstep=form.cleaned_data["md_nstep"]
468 task.md_total_steps=task.md_nstep
469 task.md_ntwe=form.cleaned_data["md_ntwe"]
470 task.md_ntwx=form.cleaned_data["md_ntwx"]
471 task.md_dt=form.cleaned_data["md_dt"]
472 task.md_lang=form.cleaned_data["md_lang"]
473 task.md_tau=form.cleaned_data["md_tau"]
474 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
475 task.md_mdpdb=form.cleaned_data["md_mdpdb"]
476 task.unres_ff=form.cleaned_data["unres_ff"]
477 task.md_respa=form.cleaned_data["md_respa"]
478 if any(c.islower() for c in seq):
481 task.boxx=form.cleaned_data["boxx"]
482 task.boxy=form.cleaned_data["boxy"]
483 task.boxz=form.cleaned_data["boxz"]
489 if is_lazy_user(request.user):
490 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
494 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
495 form = TaskForm_md_a(initial=data)
497 p_type='molecular dynamics - advanced options'
498 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
501 def add_remd(request,task_id):
502 task = get_object_or_404(Task, id=task_id)
503 if request.method == 'POST':
504 if '_example' in request.POST:
505 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
506 form = TaskForm_remd(initial=data)
508 form = TaskForm_remd(request.POST,request.FILES)
510 task.name=form.cleaned_data["name"]
512 task.md_start=form.cleaned_data["md_start"]
514 basename = str(task.owner)
515 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
516 task.jobdirname = "_".join([basename, suffix])
518 pdbid=form.cleaned_data["pdbid"]
520 task.myfile1=load_pdbid(pdbid,task.jobdirname)
523 task.myfile1=form.cleaned_data["file1"]
524 task.md_pdbref=form.cleaned_data["md_pdbref"]
525 task.md_ntwx=task.remd_nstex
528 if task.md_start == "pdbstart" or task.md_pdbref:
529 seq,task.ssbond=from_pdb(task.myfile1)
531 seq=seq_add_x(form.cleaned_data["md_seq"])
532 for i in range(0,len(seq),40):
533 task.md_seq=task.md_seq+seq[i:i+40]+" "
535 if task.md_start != "pdbstart":
538 task.md_seed=form.cleaned_data["md_seed"]
540 task.md_nstep=form.cleaned_data["md_nstep"]
541 task.md_total_steps=task.md_nstep
543 if any(c.islower() for c in seq):
552 if is_lazy_user(request.user):
553 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
557 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
558 form = TaskForm_remd(initial=data)
560 p_type='replica exchange molecular dynamics'
561 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
564 def add_remd_a(request,task_id):
565 from django.core.files.uploadedfile import UploadedFile
566 task = get_object_or_404(Task, id=task_id)
567 if request.method == 'POST':
568 if '_example' in request.POST:
569 data= {'name':task.name,'pdbid':'5G3Q:B','md_pdbref':True,
570 'md_nstep':2000000,'md_lang':'berendsen','unres_ff':'FF2','md_seed':-39912345,
571 'remd_cluter_temp':290,'md_2d':'--EEEEEEE------EEEEEE------EEEEEE------HHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHH---'}
572 form = TaskForm_remd_a(initial=data)
573 task.example='casp12'
575 elif '_example_nmr' in request.POST:
576 data= {'name':task.name,'file1':'files/6msp-from-THR.pdb','md_pdbref':True,
577 'md_nstep':200000,'md_lang':'berendsen','unres_ff':'NEWCT-9P','md_seed':-39712241,
578 'remd_nrep':4,'boxx':1000,'boxy':1000,'boxz':1000,'use_nmr':True,'file3':'files/N1008_AmbiR-trunc.txt',
579 'remd_cluter_temp':290,'md_seq':'TDELLERLRQLFEELHERGTEIVVEVHINGERDEIRVRNISKEELKKLLERIREKIEREGSSEVEVNVHSGGQTWTFNEK'}
580 form = TaskForm_remd_a(initial=data)
583 elif '_example_saxs' in request.POST:
584 data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True,
585 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
586 'remd_cluter_temp':270,
587 'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
625 form = TaskForm_remd_a(initial=data)
626 elif '_example_saxs1' in request.POST:
627 data= {'name':task.name,'pdbid':'2KMS','md_pdbref':True,'md_start':'pdbstart',
628 'md_2d':'----EEEEEE-EEEEE-------EEEEEEEEE--EEEEEE-EEEE---EEEEEEEEE-----EEEEEEE-EEE-HHHHH-EEEE-EEEEEEEEE----EEEEEE---EEE-----',
629 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
630 'remd_cluter_temp':280, 'min_maxfun':50,
631 'scal_rad':5.0,'wsaxs':1000.0,'saxs_data':
632 """0.7100E-00 0.2036E-03
633 0.1420E+01 0.4221E-03
634 0.2130E+01 0.6548E-03
635 0.2840E+01 0.9001E-03
636 0.3550E+01 0.1156E-02
637 0.4260E+01 0.1421E-02
638 0.4970E+01 0.1692E-02
639 0.5680E+01 0.1965E-02
640 0.6390E+01 0.2239E-02
641 0.7100E+01 0.2509E-02
642 0.7810E+01 0.2772E-02
643 0.8520E+01 0.3025E-02
644 0.9230E+01 0.3265E-02
645 0.9940E+01 0.3489E-02
646 0.1065E+02 0.3694E-02
647 0.1136E+02 0.3878E-02
648 0.1207E+02 0.4039E-02
649 0.1278E+02 0.4177E-02
650 0.1349E+02 0.4289E-02
651 0.1420E+02 0.4377E-02
652 0.1491E+02 0.4439E-02
653 0.1562E+02 0.4478E-02
654 0.1633E+02 0.4493E-02
655 0.1704E+02 0.4487E-02
656 0.1775E+02 0.4461E-02
657 0.1846E+02 0.4418E-02
658 0.1917E+02 0.4361E-02
659 0.1988E+02 0.4291E-02
660 0.2059E+02 0.4211E-02
661 0.2130E+02 0.4125E-02
662 0.2201E+02 0.4034E-02
663 0.2272E+02 0.3942E-02
664 0.2343E+02 0.3850E-02
665 0.2414E+02 0.3761E-02
666 0.2485E+02 0.3677E-02
667 0.2556E+02 0.3598E-02
668 0.2627E+02 0.3526E-02
669 0.2698E+02 0.3462E-02
670 0.2769E+02 0.3405E-02
671 0.2840E+02 0.3356E-02
672 0.2911E+02 0.3315E-02
673 0.2982E+02 0.3280E-02
674 0.3053E+02 0.3251E-02
675 0.3124E+02 0.3226E-02
676 0.3195E+02 0.3205E-02
677 0.3266E+02 0.3186E-02
678 0.3337E+02 0.3167E-02
679 0.3408E+02 0.3147E-02
680 0.3479E+02 0.3125E-02
681 0.3550E+02 0.3099E-02
682 0.3621E+02 0.3068E-02
683 0.3692E+02 0.3031E-02
684 0.3763E+02 0.2987E-02
685 0.3834E+02 0.2937E-02
686 0.3905E+02 0.2878E-02
687 0.3976E+02 0.2812E-02
688 0.4047E+02 0.2739E-02
689 0.4118E+02 0.2658E-02
690 0.4189E+02 0.2571E-02
691 0.4260E+02 0.2478E-02
692 0.4331E+02 0.2381E-02
693 0.4402E+02 0.2279E-02
694 0.4473E+02 0.2174E-02
695 0.4544E+02 0.2068E-02
696 0.4615E+02 0.1960E-02
697 0.4686E+02 0.1853E-02
698 0.4757E+02 0.1748E-02
699 0.4828E+02 0.1644E-02
700 0.4899E+02 0.1544E-02
701 0.4970E+02 0.1447E-02
702 0.5041E+02 0.1355E-02
703 0.5112E+02 0.1267E-02
704 0.5183E+02 0.1184E-02
705 0.5254E+02 0.1106E-02
706 0.5325E+02 0.1033E-02
707 0.5396E+02 0.9646E-03
708 0.5467E+02 0.9008E-03
709 0.5538E+02 0.8411E-03
710 0.5609E+02 0.7852E-03
711 0.5680E+02 0.7327E-03
712 0.5751E+02 0.6831E-03
713 0.5822E+02 0.6360E-03
714 0.5893E+02 0.5909E-03
715 0.5964E+02 0.5475E-03
716 0.6035E+02 0.5055E-03
717 0.6106E+02 0.4646E-03
718 0.6177E+02 0.4245E-03
719 0.6248E+02 0.3853E-03
720 0.6319E+02 0.3467E-03
721 0.6390E+02 0.3089E-03
722 0.6461E+02 0.2719E-03
723 0.6532E+02 0.2357E-03
724 0.6603E+02 0.2007E-03
725 0.6674E+02 0.1669E-03
726 0.6745E+02 0.1345E-03
727 0.6816E+02 0.1038E-03
728 0.6887E+02 0.7482E-04
729 0.6958E+02 0.4782E-04
730 0.7029E+02 0.2286E-04"""}
731 form = TaskForm_remd_a(initial=data)
733 form = TaskForm_remd_a(request.POST,request.FILES)
735 task.name=form.cleaned_data["name"]
738 basename = str(task.owner)
739 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
740 task.jobdirname = "_".join([basename, suffix])
742 pdbid=form.cleaned_data["pdbid"]
744 seq_chk=form.cleaned_data["md_seq"]
747 task.myfile1=load_pdbid(pdbid,task.jobdirname)
751 #zastapione linijkami ponizej task.myfile1=form.cleaned_data["file1"]
752 if (seq_chk == 'TDELLERLRQLFEELHERGTEIVVEVHINGERDEIRVRNISKEELKKLLERIREKIEREGSSEVEVNVHSGGQTWTFNEK' and not form.cleaned_data["file1"]):
753 reopn1 = open('files/6msp-from-THR.pdb', 'r')
754 task.myfile1 = File(reopn1)
755 # task.myfile1.name='files/6msp-from-THR.pdb'
758 task.myfile1 = form.cleaned_data["file1"]
760 task.md_start=form.cleaned_data["md_start"]
761 task.md_pdbref=form.cleaned_data["md_pdbref"]
764 if task.md_start == "pdbstart" or task.md_pdbref:
765 seq,task.ssbond=from_pdb(task.myfile1)
766 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
768 seq=seq_add_x(form.cleaned_data["md_seq"])
769 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
771 for i in range(0,len(seq),40):
772 task.md_seq=task.md_seq+seq[i:i+40]+" "
774 if task.md_start != "pdbstart":
778 task.use_nmr=form.cleaned_data["use_nmr"]
779 task.nmr_fordepth=form.cleaned_data["nmr_fordepth"]
780 task.nmr_slope=form.cleaned_data["nmr_slope"]
781 task.nmr_scal=form.cleaned_data["nmr_scal"]
783 if (seq_chk == 'TDELLERLRQLFEELHERGTEIVVEVHINGERDEIRVRNISKEELKKLLERIREKIEREGSSEVEVNVHSGGQTWTFNEK' and not form.cleaned_data["file3"]):
784 reopn = open('files/N1008_AmbiR-trunc.txt', 'r')
785 task.myfile3 = File(reopn)
786 # task.myfile3.name='files/N1008_AmbiR-trunc.txt'
787 task.linijek_nmr=from_nmr(task.myfile3)
790 task.myfile3 = form.cleaned_data["file3"]
791 task.linijek_nmr=from_nmr(form.cleaned_data["file3"])
794 if (seq_chk == 'TDELLERLRQLFEELHERGTEIVVEVHINGERDEIRVRNISKEELKKLLERIREKIEREGSSEVEVNVHSGGQTWTFNEK' and not form.cleaned_data["file1"]):
795 reopn1 = open('files/6msp-from-THR.pdb', 'r')
796 task.myfile1 = File(reopn1)
797 # task.myfile1.name='files/6msp-from-THR.pdb'
800 task.myfile1 = form.cleaned_data["file1"]
802 task.md_seed=form.cleaned_data["md_seed"]
803 task.md_nstep=form.cleaned_data["md_nstep"]
804 task.md_total_steps=task.md_nstep
805 task.md_dt=form.cleaned_data["md_dt"]
806 task.md_lang=form.cleaned_data["md_lang"]
807 task.md_tau=form.cleaned_data["md_tau"]
808 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
809 task.min_maxfun=form.cleaned_data["min_maxfun"]
810 task.remd_nrep=form.cleaned_data["remd_nrep"]
811 task.remd_nstex=form.cleaned_data["remd_nstex"]
812 task.md_ntwx=form.cleaned_data["md_ntwx"]
813 task.md_ntwe=form.cleaned_data["md_ntwe"]
814 task.md_respa=form.cleaned_data["md_respa"]
815 if any(c.islower() for c in seq):
819 # task.remd_traj1file=form.cleaned_data["remd_traj1file"]
820 # task.remd_rest1file=form.cleaned_data["remd_rest1file"]
822 task.boxx=form.cleaned_data["boxx"]
823 task.boxy=form.cleaned_data["boxy"]
824 task.boxz=form.cleaned_data["boxz"]
826 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
827 task.unres_ff=form.cleaned_data["unres_ff"]
829 task.scal_rad = form.cleaned_data["scal_rad"]
830 task.saxs_data = form.cleaned_data["saxs_data"]
831 task.wsaxs = form.cleaned_data["wsaxs"]
834 return redirect('addmlist',task_id=task.id)
836 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
837 form = TaskForm_remd_a(initial=data)
839 p_type='replica exchange molecular dynamics - advanced options'
840 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
843 def add_dock(request,task_id):
844 task = get_object_or_404(Task, id=task_id)
845 if request.method == 'POST':
846 if '_example' in request.POST:
847 data= {'name':task.name,'pdbid':'1BON:A','pdbid2':'1BON:B','md_seed':-12396738,'md_nstep':500000}
848 form = TaskForm_dock(initial=data)
850 form = TaskForm_dock(request.POST,request.FILES)
852 task.name=form.cleaned_data["name"]
855 basename = str(task.owner)
856 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
857 task.jobdirname = "_".join([basename, suffix])
859 pdbid=form.cleaned_data["pdbid"]
861 task.myfile1=load_pdbid(pdbid,task.jobdirname)
864 task.myfile1=form.cleaned_data["file1"]
866 pdbid2=form.cleaned_data["pdbid2"]
868 task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
870 seq2,ssbond2=from_pdb(task.myfile2)
872 task.myfile2=form.cleaned_data["file2"]
874 seq2=seq_add_x(form.cleaned_data["md_seq"])
877 seq2,ssbond2=from_pdb(task.myfile2)
879 task.md_ntwx=task.remd_nstex
880 task.md_start="pdbstart"
881 task.remd_multi_m='["3", "3", "3", "3", "3", "3", "3", "3"]'
882 if task.md_seq2 =='':
886 task.dock_peptide=form.cleaned_data["dock_peptide"]
890 seq1,ssbond1=from_pdb(task.myfile1)
893 if seq1[-1]=='X' and seq2[0]=='X':
895 elif seq1[-1]!='X' and seq2[0]!='X':
900 for i in range(0,len(seq),40):
901 task.md_seq=task.md_seq+seq[i:i+40]+" "
903 task.md_seed=form.cleaned_data["md_seed"]
905 task.md_nstep=form.cleaned_data["md_nstep"]
906 task.md_total_steps=task.md_nstep
908 if any(c.islower() for c in seq):
912 box1=dock_box(task.myfile1)
914 box2=dock_box(task.myfile2)
916 box2=len(task.md_seq2)*2.0
917 task.boxx=(box1+box2)*1.2+20
918 task.boxy=(box1+box2)*1.2+20
919 task.boxz=(box1+box2)*1.2+20
926 if is_lazy_user(request.user):
927 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
931 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
932 form = TaskForm_dock(initial=data)
935 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
938 def add_dock_a(request,task_id):
939 task = get_object_or_404(Task, id=task_id)
940 if request.method == 'POST':
941 if '_example' in request.POST:
942 data= {'name':task.name,'pdbid':'2HPL:A','md_seq':'DDLYG','dock_peptide':True,'md_seed':-39912345,'md_nstep':600000}
943 form = TaskForm_dock_a(initial=data)
944 task.example='dock_peptide'
947 form = TaskForm_dock_a(request.POST,request.FILES)
949 task.name=form.cleaned_data["name"]
952 basename = str(task.owner)
953 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
954 task.jobdirname = "_".join([basename, suffix])
956 pdbid=form.cleaned_data["pdbid"]
958 task.myfile1=load_pdbid(pdbid,task.jobdirname)
961 task.myfile1=form.cleaned_data["file1"]
963 pdbid2=form.cleaned_data["pdbid2"]
965 task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
967 seq2,ssbond2=from_pdb(task.myfile2)
969 task.myfile2=form.cleaned_data["file2"]
971 seq2=seq_add_x(form.cleaned_data["md_seq"])
974 seq2,ssbond2=from_pdb(task.myfile2)
977 task.md_ntwx=task.remd_nstex
978 task.md_start="pdbstart"
979 if task.md_seq2 =='':
983 task.dock_peptide=form.cleaned_data["dock_peptide"]
987 seq1,ssbond1=from_pdb(task.myfile1)
989 if seq1[-1]=='X' and seq2[0]=='X':
991 elif seq1[-1]!='X' and seq2[0]!='X':
996 for i in range(0,len(seq),40):
997 task.md_seq=task.md_seq+seq[i:i+40]+" "
999 task.md_seed=form.cleaned_data["md_seed"]
1001 task.md_nstep=form.cleaned_data["md_nstep"]
1002 task.md_total_steps=task.md_nstep
1004 task.md_dt=form.cleaned_data["md_dt"]
1005 task.md_lang=form.cleaned_data["md_lang"]
1006 task.md_tau=form.cleaned_data["md_tau"]
1007 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
1008 task.min_maxfun=form.cleaned_data["min_maxfun"]
1009 task.remd_nrep=form.cleaned_data["remd_nrep"]
1010 task.remd_nstex=form.cleaned_data["remd_nstex"]
1011 task.md_ntwx=form.cleaned_data["md_ntwx"]
1012 task.md_ntwe=form.cleaned_data["md_ntwe"]
1014 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
1015 task.remd_cluster_n=form.cleaned_data["remd_cluster_n"]
1016 task.unres_ff=form.cleaned_data["unres_ff"]
1018 if any(c.islower() for c in seq):
1022 box1=dock_box(task.myfile1)
1024 box2=dock_box(task.myfile2)
1026 box2=len(task.md_seq2)*2.0
1027 task.boxx=(box1+box2)*1.2+20
1028 task.boxy=(box1+box2)*1.2+20
1029 task.boxz=(box1+box2)*1.2+20
1032 return redirect('addmlist',task_id=task.id)
1035 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
1036 form = TaskForm_dock_a(initial=data)
1038 p_type='docking - advanced options'
1039 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
1044 def addmlist(request,task_id):
1045 task = get_object_or_404(Task, id=task_id)
1046 if request.method == 'POST':
1047 form = TaskForm_list(task.remd_nrep,request.POST)
1049 task.remd_multi_t=form.cleaned_data["temperatures"]
1050 task.remd_multi_m=form.cleaned_data["multiplexing"]
1054 if is_lazy_user(request.user):
1055 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
1057 return redirect('/')
1059 if task.example == 'casp12':
1060 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
1061 '["2", "2", "2", "2", "2", "2", "2", "2"]',
1063 '["270", "280", "290", "300", "310", "320", "330", "340"]'
1065 elif task.example == 'dock_peptide':
1066 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
1067 '["4", "8", "4", "4", "4", "4", "4", "4"]',
1069 '["270", "280", "290", "300", "310", "320", "330", "345"]'
1071 elif task.example == 'nmr':
1072 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
1073 '["2", "2", "2", "2"]',
1075 '["280", "290", "300", "310"]'
1077 elif task.unres_ff == 'FF2' and task.type=="dock":
1078 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
1079 '["3", "3", "3", "3", "3", "3", "3", "3"]',
1081 '["270", "280", "290", "300", "310", "320", "330", "345"]'
1083 elif task.unres_ff == 'opt-wtfsa-2' and task.type=="dock":
1084 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
1085 '["3", "3", "3", "3", "3", "3", "3", "3"]',
1087 '["250", "260", "270", "280", "290", "300", "315", "330"]'
1089 elif task.unres_ff == 'FF2':
1090 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
1091 '["1", "1", "1", "1", "1", "1", "1", "1"]',
1093 '["270", "280", "290", "300", "310", "320", "330", "345"]'
1096 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
1097 '["1", "1", "1", "1", "1", "1", "1", "1"]',
1099 '["250", "260", "270", "280", "290", "300", "315", "330"]'
1102 form = TaskForm_list(task.remd_nrep,initial=data)
1103 p_type='replica exchange molecular dynamics - advanced options'
1104 return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
1107 def details(request,task_id):
1108 task = get_object_or_404(Task, id=task_id)
1110 remd_models=json.loads(task.remd_models)
1113 remd_models.append(task.remd_model1)
1114 remd_models.append(task.remd_model2)
1115 remd_models.append(task.remd_model3)
1116 remd_models.append(task.remd_model4)
1117 remd_models.append(task.remd_model5)
1118 return render(request, "details.html",{'task':task,'remd_models':remd_models,'range':range(1,task.remd_cluster_n+1)})
1121 def details1(request,user_id,task_id):
1122 task = get_object_or_404(Task, id=task_id)
1124 remd_models=json.loads(task.remd_models)
1127 remd_models.append(task.remd_model1)
1128 remd_models.append(task.remd_model2)
1129 remd_models.append(task.remd_model3)
1130 remd_models.append(task.remd_model4)
1131 remd_models.append(task.remd_model5)
1132 return render(request, "details1.html",{'task':task,'remd_models':remd_models,'range':range(1,task.remd_cluster_n+1)})
1136 def delete(request, task_id):
1137 Task.objects.get(id=task_id).delete()
1138 return redirect('/')
1141 def restart(request, task_id):
1142 task = get_object_or_404(Task, id=task_id)
1144 return redirect('/')
1146 def add_restart_inp():
1147 with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
1149 if 'reset_vel=' in line:
1150 f2.write('{:79}'.format('restart'+line[7:]))
1153 os.remove('file.inp')
1154 os.rename('file.inp.tmp','file.inp')
1158 if os.path.isfile(task.jobdirname+'/finished'):
1159 os.remove(task.jobdirname+'/finished')
1162 task.md_total_steps = task.md_total_steps+task.md_nstep
1164 if task.type == 'md':
1165 os.chdir(task.jobdirname)
1167 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
1169 elif task.type == 'remd' or task.type == 'dock':
1170 os.chdir(task.jobdirname)
1172 tmp1=json.loads(task.remd_multi_m)
1173 nreplicas=sum(map(int, tmp1))
1174 with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
1176 if 'rec_end=' in line:
1177 rec=task.md_total_steps/task.md_ntwx
1178 f2.write('nfile_cx=1 rec_start='+str(rec/10)
1179 +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
1180 elif 'isampl=' in line:
1181 if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
1184 isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
1185 f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
1188 os.remove('file_wham.inp')
1189 os.rename('file_wham.tmp','file_wham.inp')
1190 if task.type == 'dock':
1191 with open('pbs8.csh','r') as f1, open ('pbs8.tmp','w') as f2:
1193 if 'generator_v13' in line:
1197 os.remove('pbs8.csh')
1198 os.rename('pbs8.tmp','pbs8.csh')
1199 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
1203 def restart1(request, user_id, task_id):
1204 task = get_object_or_404(Task, id=task_id)
1207 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1210 def refresh_done1(request, task_id):
1211 task = get_object_or_404(Task, id=task_id)
1215 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1218 for line in proc.stdout:
1219 if 'piasek4' in line:
1220 if line.split()[1]=='test_server':
1222 if line.split()[-2]=='Q':
1224 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1226 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1230 def refresh_done(request):
1232 tasks = Task.objects.filter(owner=user).order_by('-created_date')
1233 tasks_count = Task.objects.filter(owner=user).count()
1240 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1243 for line in proc.stdout:
1244 if 'piasek4' in line:
1245 if line.split()[1]=='test_server':
1247 if line.split()[-2]=='Q':
1249 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1251 if is_lazy_user(request.user):
1252 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1254 return render(request, "index.html", {
1256 'variable' : variable,
1258 'tasks_count':tasks_count
1262 def refresh_done0(task):
1263 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
1266 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1268 if task.type=='min' or task.type=='md':
1272 task.etot=line.split()[1]
1274 if 'RMS deviation' in line:
1282 if 'Total wall' in line:
1285 elif task.type=='remd' or task.type=='dock':
1287 text="Acceptance for replica exchanges and number of exchange attempts\n"
1292 text=text+' '.join(line.split()[2:])+"\n"
1293 if j==task.remd_nrep:
1295 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
1297 if 'Total wall' in line:
1300 task.results_text=text
1304 if task.md_pdbref and task.type=='remd' or task.type=='dock' and task.md_seq2 == '':
1306 for i in range(1,task.remd_cluster_n+1):
1308 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_'+str(i).zfill(4)+'.pdb', 'r') as f:
1310 remd_models.append('Cluster'+str(i)+' '+' '.join(line.split()[-3:]))
1311 except EnvironmentError:
1312 print 'file_wham_T*pdb open error'
1313 for i in range(1,task.remd_cluster_n+1):
1314 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1317 if 'RMSD of the common residues=' in line:
1318 text=' RMSD='+line.split()[5]
1319 if 'TM-score =' in line:
1320 text=text+' TMscore='+line.split()[2]
1321 if 'GDT-TS-score=' in line:
1322 text=text+' GDT_TS='+line.split()[1]
1324 remd_models[i-1]=remd_models[i-1]+text
1326 if task.type=='dock':
1327 for i in range(1,task.remd_cluster_n+1):
1328 with open(task.jobdirname+'/dockq_'+str(i)+'.out', 'r') as f:
1332 text=' Fnat='+line.split()[1]
1334 text=text+' iRMS='+line.split()[1]
1336 text=text+' LRMS='+line.split()[1]
1337 if 'CAPRI' in line and not 'DockQ_CAPRI' in line:
1338 text=text+' CAPRI='+line.split()[1]
1339 if 'DockQ_CAPRI' in line:
1340 text=text+' DockQ_CAPRI= '+line.split()[1]
1341 if 'DockQ ' in line:
1342 text=text+' DockQ='+line.split()[1]
1344 remd_models[i-1]=remd_models[i-1]+text
1345 # logger.warning("models %d %s" % (i,remd_models))
1347 if task.type=='remd' or task.type=='dock':
1348 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1351 if 'sumprob' in line:
1355 if i>task.remd_cluster_n:
1358 remd_models[i-1]=remd_models[i-1]+' Cluster'+str(i)+' probability= '+line1.split()[-2]
1360 if len(line1.split())==4:
1361 remd_models.append(' Cluster'+str(i)+' probability= '+line1.split()[-2])
1363 task.remd_models=json.dumps(remd_models)
1364 # logger.warning("models%s" % task.remd_models)
1366 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1367 if (task.type=='min'):
1369 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1374 last = line.split()[0]
1378 task.running=int(1+int(last)*100.0/task.min_maxmin)
1381 if task.running>100:
1384 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1389 last = line.split()[0]
1392 task.running=int(1+int(last)*100.0/task.md_nstep)
1393 if task.running>100:
1401 def zip_all_files(request, task_id):
1403 from django.http import HttpResponse
1404 from wsgiref.util import FileWrapper
1405 from django.core.files.temp import NamedTemporaryFile
1407 task = get_object_or_404(Task, id=task_id)
1409 temp=NamedTemporaryFile()
1410 archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
1411 for (dirpath, dirnames, filenames) in os.walk(task.jobdirname):
1412 for file1 in filenames:
1413 archive.write(dirpath+"/"+file1,file1)
1416 wrapper = FileWrapper(temp)
1417 response = HttpResponse(wrapper, content_type='application/zip')
1418 response['Content-Disposition'] = 'attachment; filename=all.zip'