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)
914 def add_restart_inp():
915 with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
917 if 'reset_vel=' in line:
918 f2.write('{:79}'.format('restart'+line[7:]))
921 os.remove('file.inp')
922 os.rename('file.inp.tmp','file.inp')
926 if os.path.isfile(task.jobdirname+'/finished'):
927 os.remove(task.jobdirname+'/finished')
930 task.md_total_steps = task.md_total_steps+task.md_nstep
932 if task.type == 'md':
933 os.chdir(task.jobdirname)
935 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
937 elif task.type == 'remd':
938 os.chdir(task.jobdirname)
940 tmp1=json.loads(task.remd_multi_m)
941 nreplicas=sum(map(int, tmp1))
942 with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
944 if 'rec_end=' in line:
945 rec=task.md_total_steps/task.md_ntwx
946 f2.write('nfile_cx=1 rec_start='+str(rec/10)
947 +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
948 elif 'isampl=' in line:
949 if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
952 isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
953 f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
956 os.remove('file_wham.inp')
957 os.rename('file_wham.tmp','file_wham.inp')
958 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
962 def restart1(request, user_id, task_id):
963 task = get_object_or_404(Task, id=task_id)
966 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
969 def refresh_done1(request, task_id):
970 task = get_object_or_404(Task, id=task_id)
974 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
977 for line in proc.stdout:
978 if 'piasek4' in line:
979 if line.split()[1]=='test_server':
981 if line.split()[-2]=='Q':
983 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
985 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
989 def refresh_done(request):
991 tasks = Task.objects.filter(owner=user).order_by('-created_date')
998 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1001 for line in proc.stdout:
1002 if 'piasek4' in line:
1003 if line.split()[1]=='test_server':
1005 if line.split()[-2]=='Q':
1007 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1009 if is_lazy_user(request.user):
1010 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1012 return render(request, "index.html", {
1014 'variable' : variable,
1019 def refresh_done0(task):
1020 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
1023 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1025 if task.type=='min' or task.type=='md':
1029 task.etot=line.split()[1]
1031 if 'RMS deviation' in line:
1039 if 'Total wall' in line:
1042 elif task.type=='remd' or task.type=='dock':
1044 text="Acceptance for replica exchanges and number of exchange attempts\n"
1049 text=text+' '.join(line.split()[2:])+"\n"
1050 if j==task.remd_nrep:
1052 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
1054 if 'Total wall' in line:
1057 task.results_text=text
1060 if task.md_pdbref and task.type=='remd':
1062 for i in range(1,6):
1064 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
1067 task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
1069 task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
1071 task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
1073 task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
1075 task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
1076 except EnvironmentError:
1077 print 'file_wham_T*pdb open error'
1078 for i in range(1,6):
1079 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1082 if 'RMSD of the common residues=' in line:
1083 text=' RMSD='+line.split()[5]
1084 if 'TM-score =' in line:
1085 text=text+' TMscore='+line.split()[2]
1086 if 'GDT-TS-score=' in line:
1087 text=text+' GDT_TS='+line.split()[1]
1090 task.remd_model1=task.remd_model1+text
1092 task.remd_model2=task.remd_model2+text
1094 task.remd_model3=task.remd_model3+text
1096 task.remd_model4=task.remd_model4+text
1098 task.remd_model5=task.remd_model5+text
1102 if task.type=='remd':
1103 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1106 if 'sumprob' in line:
1113 task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
1115 task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
1117 task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
1119 task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
1121 task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
1126 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1127 if (task.type=='min'):
1129 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1134 last = line.split()[0]
1138 task.running=int(1+int(last)*100.0/task.min_maxmin)
1141 if task.running>100:
1144 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1149 last = line.split()[0]
1152 task.running=int(1+int(last)*100.0/task.md_nstep)
1153 if task.running>100: