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"]
295 task.md_total_steps=task.md_nstep
297 basename = str(task.owner)
298 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
299 task.jobdirname = "_".join([basename, suffix])
301 pdbid=form.cleaned_data["pdbid"]
303 task.myfile1=load_pdbid(pdbid,task.jobdirname)
306 task.myfile1=form.cleaned_data["file1"]
307 task.md_pdbref=form.cleaned_data["md_pdbref"]
310 if task.md_start == "pdbstart" or task.md_pdbref:
311 seq,task.ssbond=from_pdb(task.myfile1)
313 seq=seq_add_x(form.cleaned_data["md_seq"])
315 for i in range(0,len(seq),40):
316 task.md_seq=task.md_seq+seq[i:i+40]+" "
318 if task.md_start != "pdbstart":
321 if any(c.islower() for c in seq):
328 if is_lazy_user(request.user):
329 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
333 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
334 form = TaskForm_md(initial=data)
336 p_type='molecular dynamics'
337 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
340 def add_md_a(request,task_id):
341 task = get_object_or_404(Task, id=task_id)
342 if request.method == 'POST':
343 if '_example' in request.POST:
344 data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf',
345 'md_pdbref':True,'md_mdpdb':True,'md_seed':-39912345}
346 form = TaskForm_md_a(initial=data)
348 form = TaskForm_md_a(request.POST,request.FILES)
350 task.name=form.cleaned_data["name"]
353 basename = str(task.owner)
354 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
355 task.jobdirname = "_".join([basename, suffix])
357 pdbid=form.cleaned_data["pdbid"]
359 task.myfile1=load_pdbid(pdbid,task.jobdirname)
362 task.myfile1=form.cleaned_data["file1"]
363 task.md_start=form.cleaned_data["md_start"]
364 task.md_pdbref=form.cleaned_data["md_pdbref"]
367 if task.md_start == "pdbstart" or task.md_pdbref:
368 seq,task.ssbond=from_pdb(task.myfile1)
369 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
371 seq=seq_add_x(form.cleaned_data["md_seq"])
372 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
374 for i in range(0,len(seq),40):
375 task.md_seq=task.md_seq+seq[i:i+40]+" "
377 if task.md_start != "pdbstart":
380 task.md_seed=form.cleaned_data["md_seed"]
382 task.md_temp=form.cleaned_data["md_temp"]
383 task.md_nstep=form.cleaned_data["md_nstep"]
384 task.md_total_steps=task.md_nstep
385 task.md_ntwe=form.cleaned_data["md_ntwe"]
386 task.md_ntwx=form.cleaned_data["md_ntwx"]
387 task.md_dt=form.cleaned_data["md_dt"]
388 task.md_lang=form.cleaned_data["md_lang"]
389 task.md_tau=form.cleaned_data["md_tau"]
390 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
391 task.md_mdpdb=form.cleaned_data["md_mdpdb"]
392 task.unres_ff=form.cleaned_data["unres_ff"]
393 task.md_respa=form.cleaned_data["md_respa"]
394 if any(c.islower() for c in seq):
397 task.boxx=form.cleaned_data["boxx"]
398 task.boxy=form.cleaned_data["boxy"]
399 task.boxz=form.cleaned_data["boxz"]
405 if is_lazy_user(request.user):
406 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
410 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
411 form = TaskForm_md_a(initial=data)
413 p_type='molecular dynamics - advanced options'
414 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
417 def add_remd(request,task_id):
418 task = get_object_or_404(Task, id=task_id)
419 if request.method == 'POST':
420 if '_example' in request.POST:
421 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
422 form = TaskForm_remd(initial=data)
424 form = TaskForm_remd(request.POST,request.FILES)
426 task.name=form.cleaned_data["name"]
428 task.md_start=form.cleaned_data["md_start"]
430 basename = str(task.owner)
431 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
432 task.jobdirname = "_".join([basename, suffix])
434 pdbid=form.cleaned_data["pdbid"]
436 task.myfile1=load_pdbid(pdbid,task.jobdirname)
439 task.myfile1=form.cleaned_data["file1"]
440 task.md_pdbref=form.cleaned_data["md_pdbref"]
441 task.md_ntwx=task.remd_nstex
444 if task.md_start == "pdbstart" or task.md_pdbref:
445 seq,task.ssbond=from_pdb(task.myfile1)
447 seq=seq_add_x(form.cleaned_data["md_seq"])
448 for i in range(0,len(seq),40):
449 task.md_seq=task.md_seq+seq[i:i+40]+" "
451 if task.md_start != "pdbstart":
454 task.md_seed=form.cleaned_data["md_seed"]
456 task.md_nstep=form.cleaned_data["md_nstep"]
457 task.md_total_steps=task.md_nstep
459 if any(c.islower() for c in seq):
468 if is_lazy_user(request.user):
469 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
473 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
474 form = TaskForm_remd(initial=data)
476 p_type='replica exchange molecular dynamics'
477 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
480 def add_remd_a(request,task_id):
481 from django.core.files.uploadedfile import UploadedFile
482 task = get_object_or_404(Task, id=task_id)
483 if request.method == 'POST':
484 if '_example' in request.POST:
485 data= {'name':task.name,'pdbid':'5G3Q:B','md_pdbref':True,
486 'md_nstep':2000000,'md_lang':'berendsen','unres_ff':'FF2','md_seed':-39912345,
487 'remd_cluter_temp':290,'md_2d':'--EEEEEEE------EEEEEE------EEEEEE------HHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHH---'}
488 form = TaskForm_remd_a(initial=data)
489 task.example='casp12'
491 elif '_example_saxs' in request.POST:
492 data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True,
493 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
494 'remd_cluter_temp':270,
495 'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
533 form = TaskForm_remd_a(initial=data)
534 elif '_example_saxs1' in request.POST:
535 data= {'name':task.name,'pdbid':'2KMS','md_pdbref':True,'md_start':'pdbstart',
536 'md_2d':'----EEEEEE-EEEEE-------EEEEEEEEE--EEEEEE-EEEE---EEEEEEEEE-----EEEEEEE-EEE-HHHHH-EEEE-EEEEEEEEE----EEEEEE---EEE-----',
537 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
538 'remd_cluter_temp':280, 'min_maxfun':50,
539 'scal_rad':5.0,'wsaxs':1000.0,'saxs_data':
540 """0.7100E-00 0.2036E-03
541 0.1420E+01 0.4221E-03
542 0.2130E+01 0.6548E-03
543 0.2840E+01 0.9001E-03
544 0.3550E+01 0.1156E-02
545 0.4260E+01 0.1421E-02
546 0.4970E+01 0.1692E-02
547 0.5680E+01 0.1965E-02
548 0.6390E+01 0.2239E-02
549 0.7100E+01 0.2509E-02
550 0.7810E+01 0.2772E-02
551 0.8520E+01 0.3025E-02
552 0.9230E+01 0.3265E-02
553 0.9940E+01 0.3489E-02
554 0.1065E+02 0.3694E-02
555 0.1136E+02 0.3878E-02
556 0.1207E+02 0.4039E-02
557 0.1278E+02 0.4177E-02
558 0.1349E+02 0.4289E-02
559 0.1420E+02 0.4377E-02
560 0.1491E+02 0.4439E-02
561 0.1562E+02 0.4478E-02
562 0.1633E+02 0.4493E-02
563 0.1704E+02 0.4487E-02
564 0.1775E+02 0.4461E-02
565 0.1846E+02 0.4418E-02
566 0.1917E+02 0.4361E-02
567 0.1988E+02 0.4291E-02
568 0.2059E+02 0.4211E-02
569 0.2130E+02 0.4125E-02
570 0.2201E+02 0.4034E-02
571 0.2272E+02 0.3942E-02
572 0.2343E+02 0.3850E-02
573 0.2414E+02 0.3761E-02
574 0.2485E+02 0.3677E-02
575 0.2556E+02 0.3598E-02
576 0.2627E+02 0.3526E-02
577 0.2698E+02 0.3462E-02
578 0.2769E+02 0.3405E-02
579 0.2840E+02 0.3356E-02
580 0.2911E+02 0.3315E-02
581 0.2982E+02 0.3280E-02
582 0.3053E+02 0.3251E-02
583 0.3124E+02 0.3226E-02
584 0.3195E+02 0.3205E-02
585 0.3266E+02 0.3186E-02
586 0.3337E+02 0.3167E-02
587 0.3408E+02 0.3147E-02
588 0.3479E+02 0.3125E-02
589 0.3550E+02 0.3099E-02
590 0.3621E+02 0.3068E-02
591 0.3692E+02 0.3031E-02
592 0.3763E+02 0.2987E-02
593 0.3834E+02 0.2937E-02
594 0.3905E+02 0.2878E-02
595 0.3976E+02 0.2812E-02
596 0.4047E+02 0.2739E-02
597 0.4118E+02 0.2658E-02
598 0.4189E+02 0.2571E-02
599 0.4260E+02 0.2478E-02
600 0.4331E+02 0.2381E-02
601 0.4402E+02 0.2279E-02
602 0.4473E+02 0.2174E-02
603 0.4544E+02 0.2068E-02
604 0.4615E+02 0.1960E-02
605 0.4686E+02 0.1853E-02
606 0.4757E+02 0.1748E-02
607 0.4828E+02 0.1644E-02
608 0.4899E+02 0.1544E-02
609 0.4970E+02 0.1447E-02
610 0.5041E+02 0.1355E-02
611 0.5112E+02 0.1267E-02
612 0.5183E+02 0.1184E-02
613 0.5254E+02 0.1106E-02
614 0.5325E+02 0.1033E-02
615 0.5396E+02 0.9646E-03
616 0.5467E+02 0.9008E-03
617 0.5538E+02 0.8411E-03
618 0.5609E+02 0.7852E-03
619 0.5680E+02 0.7327E-03
620 0.5751E+02 0.6831E-03
621 0.5822E+02 0.6360E-03
622 0.5893E+02 0.5909E-03
623 0.5964E+02 0.5475E-03
624 0.6035E+02 0.5055E-03
625 0.6106E+02 0.4646E-03
626 0.6177E+02 0.4245E-03
627 0.6248E+02 0.3853E-03
628 0.6319E+02 0.3467E-03
629 0.6390E+02 0.3089E-03
630 0.6461E+02 0.2719E-03
631 0.6532E+02 0.2357E-03
632 0.6603E+02 0.2007E-03
633 0.6674E+02 0.1669E-03
634 0.6745E+02 0.1345E-03
635 0.6816E+02 0.1038E-03
636 0.6887E+02 0.7482E-04
637 0.6958E+02 0.4782E-04
638 0.7029E+02 0.2286E-04"""}
639 form = TaskForm_remd_a(initial=data)
641 form = TaskForm_remd_a(request.POST,request.FILES)
643 task.name=form.cleaned_data["name"]
646 basename = str(task.owner)
647 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
648 task.jobdirname = "_".join([basename, suffix])
650 pdbid=form.cleaned_data["pdbid"]
652 task.myfile1=load_pdbid(pdbid,task.jobdirname)
655 task.myfile1=form.cleaned_data["file1"]
656 task.md_start=form.cleaned_data["md_start"]
657 task.md_pdbref=form.cleaned_data["md_pdbref"]
660 if task.md_start == "pdbstart" or task.md_pdbref:
661 seq,task.ssbond=from_pdb(task.myfile1)
662 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
664 seq=seq_add_x(form.cleaned_data["md_seq"])
665 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
667 for i in range(0,len(seq),40):
668 task.md_seq=task.md_seq+seq[i:i+40]+" "
670 if task.md_start != "pdbstart":
673 task.md_seed=form.cleaned_data["md_seed"]
674 task.md_nstep=form.cleaned_data["md_nstep"]
675 task.md_total_steps=task.md_nstep
676 task.md_dt=form.cleaned_data["md_dt"]
677 task.md_lang=form.cleaned_data["md_lang"]
678 task.md_tau=form.cleaned_data["md_tau"]
679 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
680 task.min_maxfun=form.cleaned_data["min_maxfun"]
681 task.remd_nrep=form.cleaned_data["remd_nrep"]
682 task.remd_nstex=form.cleaned_data["remd_nstex"]
683 task.md_ntwx=form.cleaned_data["md_ntwx"]
684 task.md_ntwe=form.cleaned_data["md_ntwe"]
685 task.md_respa=form.cleaned_data["md_respa"]
686 if any(c.islower() for c in seq):
690 # task.remd_traj1file=form.cleaned_data["remd_traj1file"]
691 # task.remd_rest1file=form.cleaned_data["remd_rest1file"]
693 task.boxx=form.cleaned_data["boxx"]
694 task.boxy=form.cleaned_data["boxy"]
695 task.boxz=form.cleaned_data["boxz"]
697 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
698 task.unres_ff=form.cleaned_data["unres_ff"]
700 task.scal_rad = form.cleaned_data["scal_rad"]
701 task.saxs_data = form.cleaned_data["saxs_data"]
702 task.wsaxs = form.cleaned_data["wsaxs"]
705 return redirect('addmlist',task_id=task.id)
707 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
708 form = TaskForm_remd_a(initial=data)
710 p_type='replica exchange molecular dynamics - advanced options'
711 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
714 def add_dock(request,task_id):
715 task = get_object_or_404(Task, id=task_id)
716 if request.method == 'POST':
717 if '_example' in request.POST:
718 data= {'name':task.name,'pdbid':'1L2Y','md_seed':-39912345}
719 form = TaskForm_dock(initial=data)
721 form = TaskForm_dock(request.POST,request.FILES)
723 task.name=form.cleaned_data["name"]
726 basename = str(task.owner)
727 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
728 task.jobdirname = "_".join([basename, suffix])
730 pdbid=form.cleaned_data["pdbid"]
732 task.myfile1=load_pdbid(pdbid,task.jobdirname)
735 task.myfile1=form.cleaned_data["file1"]
737 pdbid2=form.cleaned_data["pdbid2"]
739 task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
742 task.myfile2=form.cleaned_data["file2"]
744 task.md_ntwx=task.remd_nstex
745 task.md_start="pdbstart"
752 seq1,ssbond1=from_pdb(task.myfile1)
753 seq2,ssbond2=from_pdb(task.myfile2)
755 if seq1[-1]=='X' and seq2[0]=='X':
757 elif seq1[-1]!='X' and seq2[0]!='X':
762 for i in range(0,len(seq),40):
763 task.md_seq=task.md_seq+seq[i:i+40]+" "
765 task.md_seed=form.cleaned_data["md_seed"]
767 task.md_nstep=form.cleaned_data["md_nstep"]
769 if any(c.islower() for c in seq):
778 if is_lazy_user(request.user):
779 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
783 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
784 form = TaskForm_dock(initial=data)
787 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
790 def add_dock_a(request,task_id):
791 task = get_object_or_404(Task, id=task_id)
792 if request.method == 'POST':
793 if '_example' in request.POST:
794 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
795 form = TaskForm_remd(initial=data)
797 form = TaskForm_remd(request.POST,request.FILES)
799 task.name=form.cleaned_data["name"]
801 task.md_start=form.cleaned_data["md_start"]
803 basename = str(task.owner)
804 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
805 task.jobdirname = "_".join([basename, suffix])
807 pdbid=form.cleaned_data["pdbid"]
809 task.myfile1=load_pdbid(pdbid,task.jobdirname)
812 task.myfile1=form.cleaned_data["file1"]
813 task.md_pdbref=form.cleaned_data["md_pdbref"]
814 task.md_ntwx=task.remd_nstex
817 if task.md_start == "pdbstart" or task.md_pdbref:
818 seq,task.ssbond=from_pdb(task.myfile1)
820 seq=seq_add_x(form.cleaned_data["md_seq"])
821 for i in range(0,len(seq),40):
822 task.md_seq=task.md_seq+seq[i:i+40]+" "
824 if task.md_start != "pdbstart":
827 task.md_seed=form.cleaned_data["md_seed"]
829 task.md_nstep=form.cleaned_data["md_nstep"]
831 if any(c.islower() for c in seq):
840 if is_lazy_user(request.user):
841 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
845 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
846 form = TaskForm_remd(initial=data)
848 p_type='docking - advanced options'
849 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
854 def addmlist(request,task_id):
855 task = get_object_or_404(Task, id=task_id)
856 if request.method == 'POST':
857 form = TaskForm_list(task.remd_nrep,request.POST)
859 task.remd_multi_t=form.cleaned_data["temperatures"]
860 task.remd_multi_m=form.cleaned_data["multiplexing"]
864 if is_lazy_user(request.user):
865 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
869 if task.example == 'casp12':
870 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
871 '["2", "2", "2", "2", "2", "2", "2", "2"]',
873 '["270", "280", "290", "300", "310", "320", "330", "340"]'
875 elif task.unres_ff == 'FF2':
876 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
877 '["1", "1", "1", "1", "1", "1", "1", "1"]',
879 '["270", "280", "290", "300", "310", "320", "330", "345"]'
882 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
883 '["1", "1", "1", "1", "1", "1", "1", "1"]',
885 '["250", "260", "270", "280", "290", "300", "315", "330"]'
888 form = TaskForm_list(task.remd_nrep,initial=data)
889 p_type='replica exchange molecular dynamics - advanced options'
890 return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
893 def details(request,task_id):
894 task = get_object_or_404(Task, id=task_id)
895 return render(request, "details.html",{'task':task})
898 def details1(request,user_id,task_id):
899 task = get_object_or_404(Task, id=task_id)
900 return render(request, "details1.html",{'task':task})
904 def delete(request, task_id):
905 Task.objects.get(id=task_id).delete()
909 def restart(request, task_id):
910 task = get_object_or_404(Task, id=task_id)
915 if os.path.isfile(task.jobdirname+'/finished'):
916 os.remove(task.jobdirname+'/finished')
919 task.md_total_steps = task.md_total_steps+task.md_nstep
921 if task.type == 'md':
922 os.chdir(task.jobdirname)
923 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
925 elif task.type == 'remd':
926 os.chdir(task.jobdirname)
927 tmp1=json.loads(task.remd_multi_m)
928 nreplicas=sum(map(int, tmp1))
929 with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
931 if 'rec_end=' in line:
932 rec=task.md_total_steps/task.md_ntwx
933 f2.write('nfile_cx=1 rec_start='+str(rec/10)
934 +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
935 elif 'isampl=' in line:
936 if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
939 isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
940 f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
943 os.remove('file_wham.inp')
944 os.rename('file_wham.tmp','file_wham.inp')
945 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
949 def restart1(request, user_id, task_id):
950 task = get_object_or_404(Task, id=task_id)
953 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
956 def refresh_done1(request, task_id):
957 task = get_object_or_404(Task, id=task_id)
961 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
964 for line in proc.stdout:
965 if 'piasek4' in line:
966 if line.split()[1]=='test_server':
968 if line.split()[-2]=='Q':
970 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
972 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
976 def refresh_done(request):
978 tasks = Task.objects.filter(owner=user).order_by('-created_date')
985 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
988 for line in proc.stdout:
989 if 'piasek4' in line:
990 if line.split()[1]=='test_server':
992 if line.split()[-2]=='Q':
994 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
996 if is_lazy_user(request.user):
997 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
999 return render(request, "index.html", {
1001 'variable' : variable,
1006 def refresh_done0(task):
1007 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
1010 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1012 if task.type=='min' or task.type=='md':
1016 task.etot=line.split()[1]
1018 if 'RMS deviation' in line:
1026 if 'Total wall' in line:
1029 elif task.type=='remd' or task.type=='dock':
1031 text="Acceptance for replica exchanges and number of exchange attempts\n"
1036 text=text+' '.join(line.split()[2:])+"\n"
1037 if j==task.remd_nrep:
1039 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
1041 if 'Total wall' in line:
1044 task.results_text=text
1047 if task.md_pdbref and task.type=='remd':
1049 for i in range(1,6):
1051 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
1054 task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
1056 task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
1058 task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
1060 task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
1062 task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
1063 except EnvironmentError:
1064 print 'file_wham_T*pdb open error'
1065 for i in range(1,6):
1066 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1069 if 'RMSD of the common residues=' in line:
1070 text=' RMSD='+line.split()[5]
1071 if 'TM-score =' in line:
1072 text=text+' TMscore='+line.split()[2]
1073 if 'GDT-TS-score=' in line:
1074 text=text+' GDT_TS='+line.split()[1]
1077 task.remd_model1=task.remd_model1+text
1079 task.remd_model2=task.remd_model2+text
1081 task.remd_model3=task.remd_model3+text
1083 task.remd_model4=task.remd_model4+text
1085 task.remd_model5=task.remd_model5+text
1089 if task.type=='remd':
1090 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1093 if 'sumprob' in line:
1100 task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
1102 task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
1104 task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
1106 task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
1108 task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
1113 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1114 if (task.type=='min'):
1116 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1121 last = line.split()[0]
1125 task.running=int(1+int(last)*100.0/task.min_maxmin)
1128 if task.running>100:
1131 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1136 last = line.split()[0]
1139 task.running=int(1+int(last)*100.0/task.md_nstep)
1140 if task.running>100: