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)
33 def load_pdbid(pdbid,dirname,filename='plik.pdb'):
34 if (not os.path.isdir(dirname)):
37 file,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
42 pdb_tmp=urllib.urlopen('http://files.rcsb.org/download/'+pdbid+'.pdb')
43 with open(dirname+'/'+filename, 'w') as outfile:
45 if line[0:6] == 'SSBOND' and line[15] == chain and line[29] == chain:
47 if line[0:6] == 'ATOM ' and line[21] == chain:
49 if line[0:6] == 'ENDMDL':
52 file=dirname+'/'+filename
57 def seq_2d_from_pdb(seq_2d,seq):
60 seq_2d=seq_2d.replace('C', '-')
63 for i in range(0,len(seq)):
65 seq_2d_tmp=seq_2d_tmp+'-'
68 seq_2d_tmp=seq_2d_tmp+seq_2d[ii]
71 for i in range(0,len(seq_2d_tmp),40):
72 tmp=tmp+seq_2d_tmp[i:i+40]+" "
75 def seq_2d_add_x(seq_2d,seq,seq_form):
78 seq_2d=seq_2d[:len(seq_form)]
79 seq_2d=seq_2d.replace('C', '-')
80 if seq_form[0] !='X' and seq[0] == 'X':
82 if seq_form[-1] !='X' and seq[-1] == 'X':
84 seq_2d=seq_2d[:len(seq)]
86 for i in range(0,len(seq_2d),40):
87 tmp=tmp+seq_2d[i:i+40]+" "
90 def seq_add_x(sequence):
91 if sequence[0] != 'G' and sequence[0] != 'g' and sequence[0] != 'X':
93 if sequence[-1] != 'G' and sequence[-1] != 'g' and sequence[-1] != 'X':
95 set ='CDSQKIPTFNGHLRWAVEYMXcdsqkiptfnhlrwaveym'
96 sequence = ''.join([c for c in sequence if c in set])
112 if line[0:6] == 'ATOM ' and line[13:15] == 'CA':
113 aa = three_to_one.get(line[17:20])
116 if newchain or i!=ires[-1]:
121 chain_sorted.extend(ch)
123 if line[0:3] == 'TER' and i != '':
124 sequence.append('XX')
127 if line[0:6] == 'SSBOND':
129 b.append(int(line[17:21]))
130 b.append(int(line[31:35]))
133 c.append((line[15:16]))
134 c.append((line[29:30]))
136 if line[0:3] == 'END':
138 if not sequence[-1] == 'XX':
140 while sequence[-1] == 'XX':
142 if sequence[0] != 'G':
143 sequence.insert(0,'X')
144 ssbond=[ [e[0]+1,e[1]+1] for e in ssbond]
145 if sequence[-1] != 'G':
147 seq=''.join(sequence)
149 # ssbond=[ [e[0]-ires[0]+1,e[1]-ires[0]+1] for e in ssbond]
151 for c in chain_sorted:
152 unres_shift[c]=i+chain_start[c]
153 i=i-(chain_end[c]-chain_start[c])-3
154 ssbond=[ [e[0]-unres_shift[c[0]]+1,e[1]-unres_shift[c[1]]+1] for e,c in zip(ssbond,ssbond_ch)]
156 return seq,json.dumps(ssbond)
162 tasks = Task.objects.filter(owner=user).order_by('-created_date')
164 return render(request, "index.html", {
165 'tasks': tasks, 'alldone': 0
170 if request.method == 'POST':
171 form = TaskForm(request.POST)
173 name = form.cleaned_data["name"]
175 task = Task(name=name,owner=user,ready=False)
177 return redirect('add_min',task_id=task.id)
181 def add_min(request,task_id):
182 task = get_object_or_404(Task, id=task_id)
183 if request.method == 'POST':
184 if '_example' in request.POST:
185 data= {'name':task.name,'pdbid':'1BDD'}
186 form = TaskForm_min(initial=data)
188 form = TaskForm_min(request.POST,request.FILES)
190 task.name=form.cleaned_data["name"]
192 pdbid=form.cleaned_data["pdbid"]
194 basename = str(task.owner)
195 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
196 task.jobdirname = "_".join([basename, suffix])
199 task.myfile1=load_pdbid(pdbid,task.jobdirname)
202 task.myfile1=form.cleaned_data["file1"]
204 seq,task.ssbond=from_pdb(task.myfile1)
206 for i in range(0,len(seq),40):
207 task.md_seq=task.md_seq+seq[i:i+40]+" "
212 if is_lazy_user(request.user):
213 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
217 data= {'name':task.name}
218 form = TaskForm_min(initial=data)
219 p_type='minimization'
221 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
224 def add_min_a(request,task_id):
225 task = get_object_or_404(Task, id=task_id)
226 if request.method == 'POST':
227 if '_example' in request.POST:
228 data= {'name':task.name,'pdbid':'1EI0','unres_ff':'opt-wtfsa-2'}
229 form = TaskForm_min_a(initial=data)
231 form = TaskForm_min_a(request.POST,request.FILES)
233 task.name=form.cleaned_data["name"]
235 # task.min_choice=form.cleaned_data["min_choice"]
236 task.min_overlap=form.cleaned_data["min_overlap"]
237 task.min_searchsc=form.cleaned_data["min_searchsc"]
238 task.min_maxmin=form.cleaned_data["min_maxmin"]
239 task.min_maxfun=form.cleaned_data["min_maxfun"]
240 task.min_pdbout=form.cleaned_data["min_pdbout"]
242 basename = str(task.owner)
243 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
244 task.jobdirname = "_".join([basename, suffix])
246 pdbid=form.cleaned_data["pdbid"]
248 task.myfile1=load_pdbid(pdbid,task.jobdirname)
251 task.myfile1=form.cleaned_data["file1"]
253 task.min_unres_pdb=form.cleaned_data["min_unres_pdb"]
254 task.unres_ff=form.cleaned_data["unres_ff"]
255 task.boxx=form.cleaned_data["boxx"]
256 task.boxy=form.cleaned_data["boxy"]
257 task.boxz=form.cleaned_data["boxz"]
259 seq,task.ssbond=from_pdb(task.myfile1)
261 for i in range(0,len(seq),40):
262 task.md_seq=task.md_seq+seq[i:i+40]+" "
267 if is_lazy_user(request.user):
268 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
272 data= {'name':task.name}
273 form = TaskForm_min_a(initial=data)
275 p_type='minimization - advanced options'
276 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
279 def add_md(request,task_id):
280 task = get_object_or_404(Task, id=task_id)
281 if request.method == 'POST':
282 if '_example' in request.POST:
283 data= {'name':task.name,'pdbid':'1IGD','md_start':'pdbstart',
284 'md_pdbref':True,'md_temp':200,'md_seed':-39912345}
285 form = TaskForm_md(initial=data)
287 form = TaskForm_md(request.POST,request.FILES)
289 task.name=form.cleaned_data["name"]
291 task.md_seed=form.cleaned_data["md_seed"]
292 task.md_start=form.cleaned_data["md_start"]
293 task.md_temp=form.cleaned_data["md_temp"]
294 task.md_nstep=form.cleaned_data["md_nstep"]
296 basename = str(task.owner)
297 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
298 task.jobdirname = "_".join([basename, suffix])
300 pdbid=form.cleaned_data["pdbid"]
302 task.myfile1=load_pdbid(pdbid,task.jobdirname)
305 task.myfile1=form.cleaned_data["file1"]
306 task.md_pdbref=form.cleaned_data["md_pdbref"]
309 if task.md_start == "pdbstart" or task.md_pdbref:
310 seq,task.ssbond=from_pdb(task.myfile1)
312 seq=seq_add_x(form.cleaned_data["md_seq"])
314 for i in range(0,len(seq),40):
315 task.md_seq=task.md_seq+seq[i:i+40]+" "
317 if task.md_start != "pdbstart":
320 if any(c.islower() for c in seq):
327 if is_lazy_user(request.user):
328 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
332 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
333 form = TaskForm_md(initial=data)
335 p_type='molecular dynamics'
336 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
339 def add_md_a(request,task_id):
340 task = get_object_or_404(Task, id=task_id)
341 if request.method == 'POST':
342 if '_example' in request.POST:
343 data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf',
344 'md_pdbref':True,'md_mdpdb':True,'md_seed':-39912345}
345 form = TaskForm_md_a(initial=data)
347 form = TaskForm_md_a(request.POST,request.FILES)
349 task.name=form.cleaned_data["name"]
352 basename = str(task.owner)
353 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
354 task.jobdirname = "_".join([basename, suffix])
356 pdbid=form.cleaned_data["pdbid"]
358 task.myfile1=load_pdbid(pdbid,task.jobdirname)
361 task.myfile1=form.cleaned_data["file1"]
362 task.md_start=form.cleaned_data["md_start"]
363 task.md_pdbref=form.cleaned_data["md_pdbref"]
366 if task.md_start == "pdbstart" or task.md_pdbref:
367 seq,task.ssbond=from_pdb(task.myfile1)
368 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
370 seq=seq_add_x(form.cleaned_data["md_seq"])
371 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
373 for i in range(0,len(seq),40):
374 task.md_seq=task.md_seq+seq[i:i+40]+" "
376 if task.md_start != "pdbstart":
379 task.md_seed=form.cleaned_data["md_seed"]
381 task.md_temp=form.cleaned_data["md_temp"]
382 task.md_nstep=form.cleaned_data["md_nstep"]
383 task.md_ntwe=form.cleaned_data["md_ntwe"]
384 task.md_ntwx=form.cleaned_data["md_ntwx"]
385 task.md_dt=form.cleaned_data["md_dt"]
386 task.md_lang=form.cleaned_data["md_lang"]
387 task.md_tau=form.cleaned_data["md_tau"]
388 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
389 task.md_mdpdb=form.cleaned_data["md_mdpdb"]
390 task.unres_ff=form.cleaned_data["unres_ff"]
391 task.md_respa=form.cleaned_data["md_respa"]
392 if any(c.islower() for c in seq):
395 task.boxx=form.cleaned_data["boxx"]
396 task.boxy=form.cleaned_data["boxy"]
397 task.boxz=form.cleaned_data["boxz"]
403 if is_lazy_user(request.user):
404 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
408 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
409 form = TaskForm_md_a(initial=data)
411 p_type='molecular dynamics - advanced options'
412 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
415 def add_remd(request,task_id):
416 task = get_object_or_404(Task, id=task_id)
417 if request.method == 'POST':
418 if '_example' in request.POST:
419 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
420 form = TaskForm_remd(initial=data)
422 form = TaskForm_remd(request.POST,request.FILES)
424 task.name=form.cleaned_data["name"]
426 task.md_start=form.cleaned_data["md_start"]
428 basename = str(task.owner)
429 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
430 task.jobdirname = "_".join([basename, suffix])
432 pdbid=form.cleaned_data["pdbid"]
434 task.myfile1=load_pdbid(pdbid,task.jobdirname)
437 task.myfile1=form.cleaned_data["file1"]
438 task.md_pdbref=form.cleaned_data["md_pdbref"]
439 task.md_ntwx=task.remd_nstex
442 if task.md_start == "pdbstart" or task.md_pdbref:
443 seq,task.ssbond=from_pdb(task.myfile1)
445 seq=seq_add_x(form.cleaned_data["md_seq"])
446 for i in range(0,len(seq),40):
447 task.md_seq=task.md_seq+seq[i:i+40]+" "
449 if task.md_start != "pdbstart":
452 task.md_seed=form.cleaned_data["md_seed"]
454 task.md_nstep=form.cleaned_data["md_nstep"]
456 if any(c.islower() for c in seq):
465 if is_lazy_user(request.user):
466 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
470 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
471 form = TaskForm_remd(initial=data)
473 p_type='replica exchange molecular dynamics'
474 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
477 def add_remd_a(request,task_id):
478 from django.core.files.uploadedfile import UploadedFile
479 task = get_object_or_404(Task, id=task_id)
480 if request.method == 'POST':
481 if '_example' in request.POST:
482 data= {'name':task.name,'pdbid':'5G3Q:B','md_pdbref':True,
483 'md_nstep':2000000,'md_lang':'berendsen','unres_ff':'FF2','md_seed':-39912345,
484 'remd_cluter_temp':290,'md_2d':'--EEEEEEE------EEEEEE------EEEEEE------HHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHH---'}
485 form = TaskForm_remd_a(initial=data)
486 task.example='casp12'
488 elif '_example_saxs' in request.POST:
489 data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True,
490 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
491 'remd_cluter_temp':270,
492 'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
530 form = TaskForm_remd_a(initial=data)
531 elif '_example_saxs1' in request.POST:
532 data= {'name':task.name,'pdbid':'2KMS','md_pdbref':True,'md_start':'pdbstart',
533 'md_2d':'----EEEEEE-EEEEE-------EEEEEEEEE--EEEEEE-EEEE---EEEEEEEEE-----EEEEEEE-EEE-HHHHH-EEEE-EEEEEEEEE----EEEEEE---EEE-----',
534 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
535 'remd_cluter_temp':280, 'min_maxfun':50,
536 'scal_rad':5.0,'wsaxs':1000.0,'saxs_data':
537 """0.7100E-00 0.2036E-03
538 0.1420E+01 0.4221E-03
539 0.2130E+01 0.6548E-03
540 0.2840E+01 0.9001E-03
541 0.3550E+01 0.1156E-02
542 0.4260E+01 0.1421E-02
543 0.4970E+01 0.1692E-02
544 0.5680E+01 0.1965E-02
545 0.6390E+01 0.2239E-02
546 0.7100E+01 0.2509E-02
547 0.7810E+01 0.2772E-02
548 0.8520E+01 0.3025E-02
549 0.9230E+01 0.3265E-02
550 0.9940E+01 0.3489E-02
551 0.1065E+02 0.3694E-02
552 0.1136E+02 0.3878E-02
553 0.1207E+02 0.4039E-02
554 0.1278E+02 0.4177E-02
555 0.1349E+02 0.4289E-02
556 0.1420E+02 0.4377E-02
557 0.1491E+02 0.4439E-02
558 0.1562E+02 0.4478E-02
559 0.1633E+02 0.4493E-02
560 0.1704E+02 0.4487E-02
561 0.1775E+02 0.4461E-02
562 0.1846E+02 0.4418E-02
563 0.1917E+02 0.4361E-02
564 0.1988E+02 0.4291E-02
565 0.2059E+02 0.4211E-02
566 0.2130E+02 0.4125E-02
567 0.2201E+02 0.4034E-02
568 0.2272E+02 0.3942E-02
569 0.2343E+02 0.3850E-02
570 0.2414E+02 0.3761E-02
571 0.2485E+02 0.3677E-02
572 0.2556E+02 0.3598E-02
573 0.2627E+02 0.3526E-02
574 0.2698E+02 0.3462E-02
575 0.2769E+02 0.3405E-02
576 0.2840E+02 0.3356E-02
577 0.2911E+02 0.3315E-02
578 0.2982E+02 0.3280E-02
579 0.3053E+02 0.3251E-02
580 0.3124E+02 0.3226E-02
581 0.3195E+02 0.3205E-02
582 0.3266E+02 0.3186E-02
583 0.3337E+02 0.3167E-02
584 0.3408E+02 0.3147E-02
585 0.3479E+02 0.3125E-02
586 0.3550E+02 0.3099E-02
587 0.3621E+02 0.3068E-02
588 0.3692E+02 0.3031E-02
589 0.3763E+02 0.2987E-02
590 0.3834E+02 0.2937E-02
591 0.3905E+02 0.2878E-02
592 0.3976E+02 0.2812E-02
593 0.4047E+02 0.2739E-02
594 0.4118E+02 0.2658E-02
595 0.4189E+02 0.2571E-02
596 0.4260E+02 0.2478E-02
597 0.4331E+02 0.2381E-02
598 0.4402E+02 0.2279E-02
599 0.4473E+02 0.2174E-02
600 0.4544E+02 0.2068E-02
601 0.4615E+02 0.1960E-02
602 0.4686E+02 0.1853E-02
603 0.4757E+02 0.1748E-02
604 0.4828E+02 0.1644E-02
605 0.4899E+02 0.1544E-02
606 0.4970E+02 0.1447E-02
607 0.5041E+02 0.1355E-02
608 0.5112E+02 0.1267E-02
609 0.5183E+02 0.1184E-02
610 0.5254E+02 0.1106E-02
611 0.5325E+02 0.1033E-02
612 0.5396E+02 0.9646E-03
613 0.5467E+02 0.9008E-03
614 0.5538E+02 0.8411E-03
615 0.5609E+02 0.7852E-03
616 0.5680E+02 0.7327E-03
617 0.5751E+02 0.6831E-03
618 0.5822E+02 0.6360E-03
619 0.5893E+02 0.5909E-03
620 0.5964E+02 0.5475E-03
621 0.6035E+02 0.5055E-03
622 0.6106E+02 0.4646E-03
623 0.6177E+02 0.4245E-03
624 0.6248E+02 0.3853E-03
625 0.6319E+02 0.3467E-03
626 0.6390E+02 0.3089E-03
627 0.6461E+02 0.2719E-03
628 0.6532E+02 0.2357E-03
629 0.6603E+02 0.2007E-03
630 0.6674E+02 0.1669E-03
631 0.6745E+02 0.1345E-03
632 0.6816E+02 0.1038E-03
633 0.6887E+02 0.7482E-04
634 0.6958E+02 0.4782E-04
635 0.7029E+02 0.2286E-04"""}
636 form = TaskForm_remd_a(initial=data)
638 form = TaskForm_remd_a(request.POST,request.FILES)
640 task.name=form.cleaned_data["name"]
643 basename = str(task.owner)
644 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
645 task.jobdirname = "_".join([basename, suffix])
647 pdbid=form.cleaned_data["pdbid"]
649 task.myfile1=load_pdbid(pdbid,task.jobdirname)
652 task.myfile1=form.cleaned_data["file1"]
653 task.md_start=form.cleaned_data["md_start"]
654 task.md_pdbref=form.cleaned_data["md_pdbref"]
657 if task.md_start == "pdbstart" or task.md_pdbref:
658 seq,task.ssbond=from_pdb(task.myfile1)
659 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
661 seq=seq_add_x(form.cleaned_data["md_seq"])
662 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
664 for i in range(0,len(seq),40):
665 task.md_seq=task.md_seq+seq[i:i+40]+" "
667 if task.md_start != "pdbstart":
670 task.md_seed=form.cleaned_data["md_seed"]
671 task.md_nstep=form.cleaned_data["md_nstep"]
672 task.md_dt=form.cleaned_data["md_dt"]
673 task.md_lang=form.cleaned_data["md_lang"]
674 task.md_tau=form.cleaned_data["md_tau"]
675 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
676 task.min_maxfun=form.cleaned_data["min_maxfun"]
677 task.remd_nrep=form.cleaned_data["remd_nrep"]
678 task.remd_nstex=form.cleaned_data["remd_nstex"]
679 task.md_ntwx=form.cleaned_data["md_ntwx"]
680 task.md_ntwe=form.cleaned_data["md_ntwe"]
681 task.md_respa=form.cleaned_data["md_respa"]
682 if any(c.islower() for c in seq):
686 # task.remd_traj1file=form.cleaned_data["remd_traj1file"]
687 # task.remd_rest1file=form.cleaned_data["remd_rest1file"]
689 task.boxx=form.cleaned_data["boxx"]
690 task.boxy=form.cleaned_data["boxy"]
691 task.boxz=form.cleaned_data["boxz"]
693 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
694 task.unres_ff=form.cleaned_data["unres_ff"]
696 task.scal_rad = form.cleaned_data["scal_rad"]
697 task.saxs_data = form.cleaned_data["saxs_data"]
698 task.wsaxs = form.cleaned_data["wsaxs"]
701 return redirect('addmlist',task_id=task.id)
703 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
704 form = TaskForm_remd_a(initial=data)
706 p_type='replica exchange molecular dynamics - advanced options'
707 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
710 def add_dock(request,task_id):
711 task = get_object_or_404(Task, id=task_id)
712 if request.method == 'POST':
713 if '_example' in request.POST:
714 data= {'name':task.name,'pdbid':'1L2Y','md_seed':-39912345}
715 form = TaskForm_dock(initial=data)
717 form = TaskForm_dock(request.POST,request.FILES)
719 task.name=form.cleaned_data["name"]
722 basename = str(task.owner)
723 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
724 task.jobdirname = "_".join([basename, suffix])
726 pdbid=form.cleaned_data["pdbid"]
728 task.myfile1=load_pdbid(pdbid,task.jobdirname)
731 task.myfile1=form.cleaned_data["file1"]
733 pdbid2=form.cleaned_data["pdbid2"]
735 task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
738 task.myfile2=form.cleaned_data["file2"]
740 task.md_ntwx=task.remd_nstex
741 task.md_start="pdbstart"
748 seq1,ssbond1=from_pdb(task.myfile1)
749 seq2,ssbond2=from_pdb(task.myfile2)
751 if seq1[-1]=='X' and seq2[0]=='X':
753 elif seq1[-1]!='X' and seq2[0]!='X':
758 for i in range(0,len(seq),40):
759 task.md_seq=task.md_seq+seq[i:i+40]+" "
761 task.md_seed=form.cleaned_data["md_seed"]
763 task.md_nstep=form.cleaned_data["md_nstep"]
765 if any(c.islower() for c in seq):
774 if is_lazy_user(request.user):
775 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
779 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
780 form = TaskForm_dock(initial=data)
783 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
786 def add_dock_a(request,task_id):
787 task = get_object_or_404(Task, id=task_id)
788 if request.method == 'POST':
789 if '_example' in request.POST:
790 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
791 form = TaskForm_remd(initial=data)
793 form = TaskForm_remd(request.POST,request.FILES)
795 task.name=form.cleaned_data["name"]
797 task.md_start=form.cleaned_data["md_start"]
799 basename = str(task.owner)
800 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
801 task.jobdirname = "_".join([basename, suffix])
803 pdbid=form.cleaned_data["pdbid"]
805 task.myfile1=load_pdbid(pdbid,task.jobdirname)
808 task.myfile1=form.cleaned_data["file1"]
809 task.md_pdbref=form.cleaned_data["md_pdbref"]
810 task.md_ntwx=task.remd_nstex
813 if task.md_start == "pdbstart" or task.md_pdbref:
814 seq,task.ssbond=from_pdb(task.myfile1)
816 seq=seq_add_x(form.cleaned_data["md_seq"])
817 for i in range(0,len(seq),40):
818 task.md_seq=task.md_seq+seq[i:i+40]+" "
820 if task.md_start != "pdbstart":
823 task.md_seed=form.cleaned_data["md_seed"]
825 task.md_nstep=form.cleaned_data["md_nstep"]
827 if any(c.islower() for c in seq):
836 if is_lazy_user(request.user):
837 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
841 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
842 form = TaskForm_remd(initial=data)
844 p_type='docking - advanced options'
845 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
850 def addmlist(request,task_id):
851 task = get_object_or_404(Task, id=task_id)
852 if request.method == 'POST':
853 form = TaskForm_list(task.remd_nrep,request.POST)
855 task.remd_multi_t=form.cleaned_data["temperatures"]
856 task.remd_multi_m=form.cleaned_data["multiplexing"]
860 if is_lazy_user(request.user):
861 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
865 if task.example == 'casp12':
866 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
867 '["2", "2", "2", "2", "2", "2", "2", "2"]',
869 '["270", "280", "290", "300", "310", "320", "330", "340"]'
871 elif task.unres_ff == 'FF2':
872 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
873 '["1", "1", "1", "1", "1", "1", "1", "1"]',
875 '["270", "280", "290", "300", "310", "320", "330", "345"]'
878 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
879 '["1", "1", "1", "1", "1", "1", "1", "1"]',
881 '["250", "260", "270", "280", "290", "300", "315", "330"]'
884 form = TaskForm_list(task.remd_nrep,initial=data)
885 p_type='replica exchange molecular dynamics - advanced options'
886 return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
889 def details(request,task_id):
890 task = get_object_or_404(Task, id=task_id)
891 return render(request, "details.html",{'task':task})
894 def details1(request,user_id,task_id):
895 task = get_object_or_404(Task, id=task_id)
896 return render(request, "details1.html",{'task':task})
900 def delete(request, task_id):
901 Task.objects.get(id=task_id).delete()
904 def refresh_done1(request, task_id):
905 task = get_object_or_404(Task, id=task_id)
909 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
912 for line in proc.stdout:
913 if 'piasek4' in line:
914 if line.split()[1]=='test_server':
916 if line.split()[-2]=='Q':
918 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
920 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
924 def refresh_done(request):
926 tasks = Task.objects.filter(owner=user).order_by('-created_date')
933 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
936 for line in proc.stdout:
937 if 'piasek4' in line:
938 if line.split()[1]=='test_server':
940 if line.split()[-2]=='Q':
942 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
944 if is_lazy_user(request.user):
945 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
947 return render(request, "index.html", {
949 'variable' : variable,
954 def refresh_done0(task):
955 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
958 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
960 if task.type=='min' or task.type=='md':
964 task.etot=line.split()[1]
966 if 'RMS deviation' in line:
974 if 'Total wall' in line:
977 elif task.type=='remd' or task.type=='dock':
979 text="Acceptance for replica exchanges and number of exchange attempts\n"
984 text=text+' '.join(line.split()[2:])+"\n"
985 if j==task.remd_nrep:
987 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
989 if 'Total wall' in line:
992 task.results_text=text
995 if task.md_pdbref and task.type=='remd':
999 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
1002 task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
1004 task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
1006 task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
1008 task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
1010 task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
1011 except EnvironmentError:
1012 print 'file_wham_T*pdb open error'
1013 for i in range(1,6):
1014 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1017 if 'RMSD of the common residues=' in line:
1018 text=' RMSD='+line.split()[5]
1019 if 'TM-score =' in line:
1020 text=text+' TMscore='+line.split()[2]
1021 if 'GDT-TS-score=' in line:
1022 text=text+' GDT_TS='+line.split()[1]
1025 task.remd_model1=task.remd_model1+text
1027 task.remd_model2=task.remd_model2+text
1029 task.remd_model3=task.remd_model3+text
1031 task.remd_model4=task.remd_model4+text
1033 task.remd_model5=task.remd_model5+text
1037 if task.type=='remd':
1038 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1041 if 'sumprob' in line:
1048 task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
1050 task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
1052 task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
1054 task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
1056 task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
1061 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1062 if (task.type=='min'):
1064 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1069 last = line.split()[0]
1073 task.running=int(1+int(last)*100.0/task.min_maxmin)
1076 if task.running>100:
1079 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1084 last = line.split()[0]
1087 task.running=int(1+int(last)*100.0/task.md_nstep)
1088 if task.running>100: