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
296 if task.md_nstep<250000:
299 basename = str(task.owner)
300 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
301 task.jobdirname = "_".join([basename, suffix])
303 pdbid=form.cleaned_data["pdbid"]
305 task.myfile1=load_pdbid(pdbid,task.jobdirname)
308 task.myfile1=form.cleaned_data["file1"]
309 task.md_pdbref=form.cleaned_data["md_pdbref"]
312 if task.md_start == "pdbstart" or task.md_pdbref:
313 seq,task.ssbond=from_pdb(task.myfile1)
315 seq=seq_add_x(form.cleaned_data["md_seq"])
317 for i in range(0,len(seq),40):
318 task.md_seq=task.md_seq+seq[i:i+40]+" "
320 if task.md_start != "pdbstart":
323 if any(c.islower() for c in seq):
330 if is_lazy_user(request.user):
331 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
335 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
336 form = TaskForm_md(initial=data)
338 p_type='molecular dynamics'
339 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
342 def add_md_a(request,task_id):
343 task = get_object_or_404(Task, id=task_id)
344 if request.method == 'POST':
345 if '_example' in request.POST:
346 data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf',
347 'md_pdbref':True,'md_mdpdb':True,'md_seed':-39912345}
348 form = TaskForm_md_a(initial=data)
350 form = TaskForm_md_a(request.POST,request.FILES)
352 task.name=form.cleaned_data["name"]
355 basename = str(task.owner)
356 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
357 task.jobdirname = "_".join([basename, suffix])
359 pdbid=form.cleaned_data["pdbid"]
361 task.myfile1=load_pdbid(pdbid,task.jobdirname)
364 task.myfile1=form.cleaned_data["file1"]
365 task.md_start=form.cleaned_data["md_start"]
366 task.md_pdbref=form.cleaned_data["md_pdbref"]
369 if task.md_start == "pdbstart" or task.md_pdbref:
370 seq,task.ssbond=from_pdb(task.myfile1)
371 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
373 seq=seq_add_x(form.cleaned_data["md_seq"])
374 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
376 for i in range(0,len(seq),40):
377 task.md_seq=task.md_seq+seq[i:i+40]+" "
379 if task.md_start != "pdbstart":
382 task.md_seed=form.cleaned_data["md_seed"]
384 task.md_temp=form.cleaned_data["md_temp"]
385 task.md_nstep=form.cleaned_data["md_nstep"]
386 task.md_total_steps=task.md_nstep
387 task.md_ntwe=form.cleaned_data["md_ntwe"]
388 task.md_ntwx=form.cleaned_data["md_ntwx"]
389 task.md_dt=form.cleaned_data["md_dt"]
390 task.md_lang=form.cleaned_data["md_lang"]
391 task.md_tau=form.cleaned_data["md_tau"]
392 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
393 task.md_mdpdb=form.cleaned_data["md_mdpdb"]
394 task.unres_ff=form.cleaned_data["unres_ff"]
395 task.md_respa=form.cleaned_data["md_respa"]
396 if any(c.islower() for c in seq):
399 task.boxx=form.cleaned_data["boxx"]
400 task.boxy=form.cleaned_data["boxy"]
401 task.boxz=form.cleaned_data["boxz"]
407 if is_lazy_user(request.user):
408 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
412 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
413 form = TaskForm_md_a(initial=data)
415 p_type='molecular dynamics - advanced options'
416 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
419 def add_remd(request,task_id):
420 task = get_object_or_404(Task, id=task_id)
421 if request.method == 'POST':
422 if '_example' in request.POST:
423 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
424 form = TaskForm_remd(initial=data)
426 form = TaskForm_remd(request.POST,request.FILES)
428 task.name=form.cleaned_data["name"]
430 task.md_start=form.cleaned_data["md_start"]
432 basename = str(task.owner)
433 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
434 task.jobdirname = "_".join([basename, suffix])
436 pdbid=form.cleaned_data["pdbid"]
438 task.myfile1=load_pdbid(pdbid,task.jobdirname)
441 task.myfile1=form.cleaned_data["file1"]
442 task.md_pdbref=form.cleaned_data["md_pdbref"]
443 task.md_ntwx=task.remd_nstex
446 if task.md_start == "pdbstart" or task.md_pdbref:
447 seq,task.ssbond=from_pdb(task.myfile1)
449 seq=seq_add_x(form.cleaned_data["md_seq"])
450 for i in range(0,len(seq),40):
451 task.md_seq=task.md_seq+seq[i:i+40]+" "
453 if task.md_start != "pdbstart":
456 task.md_seed=form.cleaned_data["md_seed"]
458 task.md_nstep=form.cleaned_data["md_nstep"]
459 task.md_total_steps=task.md_nstep
461 if any(c.islower() for c in seq):
470 if is_lazy_user(request.user):
471 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
475 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
476 form = TaskForm_remd(initial=data)
478 p_type='replica exchange molecular dynamics'
479 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
482 def add_remd_a(request,task_id):
483 from django.core.files.uploadedfile import UploadedFile
484 task = get_object_or_404(Task, id=task_id)
485 if request.method == 'POST':
486 if '_example' in request.POST:
487 data= {'name':task.name,'pdbid':'5G3Q:B','md_pdbref':True,
488 'md_nstep':2000000,'md_lang':'berendsen','unres_ff':'FF2','md_seed':-39912345,
489 'remd_cluter_temp':290,'md_2d':'--EEEEEEE------EEEEEE------EEEEEE------HHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHH---'}
490 form = TaskForm_remd_a(initial=data)
491 task.example='casp12'
493 elif '_example_saxs' in request.POST:
494 data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True,
495 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
496 'remd_cluter_temp':270,
497 'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
535 form = TaskForm_remd_a(initial=data)
536 elif '_example_saxs1' in request.POST:
537 data= {'name':task.name,'pdbid':'2KMS','md_pdbref':True,'md_start':'pdbstart',
538 'md_2d':'----EEEEEE-EEEEE-------EEEEEEEEE--EEEEEE-EEEE---EEEEEEEEE-----EEEEEEE-EEE-HHHHH-EEEE-EEEEEEEEE----EEEEEE---EEE-----',
539 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
540 'remd_cluter_temp':280, 'min_maxfun':50,
541 'scal_rad':5.0,'wsaxs':1000.0,'saxs_data':
542 """0.7100E-00 0.2036E-03
543 0.1420E+01 0.4221E-03
544 0.2130E+01 0.6548E-03
545 0.2840E+01 0.9001E-03
546 0.3550E+01 0.1156E-02
547 0.4260E+01 0.1421E-02
548 0.4970E+01 0.1692E-02
549 0.5680E+01 0.1965E-02
550 0.6390E+01 0.2239E-02
551 0.7100E+01 0.2509E-02
552 0.7810E+01 0.2772E-02
553 0.8520E+01 0.3025E-02
554 0.9230E+01 0.3265E-02
555 0.9940E+01 0.3489E-02
556 0.1065E+02 0.3694E-02
557 0.1136E+02 0.3878E-02
558 0.1207E+02 0.4039E-02
559 0.1278E+02 0.4177E-02
560 0.1349E+02 0.4289E-02
561 0.1420E+02 0.4377E-02
562 0.1491E+02 0.4439E-02
563 0.1562E+02 0.4478E-02
564 0.1633E+02 0.4493E-02
565 0.1704E+02 0.4487E-02
566 0.1775E+02 0.4461E-02
567 0.1846E+02 0.4418E-02
568 0.1917E+02 0.4361E-02
569 0.1988E+02 0.4291E-02
570 0.2059E+02 0.4211E-02
571 0.2130E+02 0.4125E-02
572 0.2201E+02 0.4034E-02
573 0.2272E+02 0.3942E-02
574 0.2343E+02 0.3850E-02
575 0.2414E+02 0.3761E-02
576 0.2485E+02 0.3677E-02
577 0.2556E+02 0.3598E-02
578 0.2627E+02 0.3526E-02
579 0.2698E+02 0.3462E-02
580 0.2769E+02 0.3405E-02
581 0.2840E+02 0.3356E-02
582 0.2911E+02 0.3315E-02
583 0.2982E+02 0.3280E-02
584 0.3053E+02 0.3251E-02
585 0.3124E+02 0.3226E-02
586 0.3195E+02 0.3205E-02
587 0.3266E+02 0.3186E-02
588 0.3337E+02 0.3167E-02
589 0.3408E+02 0.3147E-02
590 0.3479E+02 0.3125E-02
591 0.3550E+02 0.3099E-02
592 0.3621E+02 0.3068E-02
593 0.3692E+02 0.3031E-02
594 0.3763E+02 0.2987E-02
595 0.3834E+02 0.2937E-02
596 0.3905E+02 0.2878E-02
597 0.3976E+02 0.2812E-02
598 0.4047E+02 0.2739E-02
599 0.4118E+02 0.2658E-02
600 0.4189E+02 0.2571E-02
601 0.4260E+02 0.2478E-02
602 0.4331E+02 0.2381E-02
603 0.4402E+02 0.2279E-02
604 0.4473E+02 0.2174E-02
605 0.4544E+02 0.2068E-02
606 0.4615E+02 0.1960E-02
607 0.4686E+02 0.1853E-02
608 0.4757E+02 0.1748E-02
609 0.4828E+02 0.1644E-02
610 0.4899E+02 0.1544E-02
611 0.4970E+02 0.1447E-02
612 0.5041E+02 0.1355E-02
613 0.5112E+02 0.1267E-02
614 0.5183E+02 0.1184E-02
615 0.5254E+02 0.1106E-02
616 0.5325E+02 0.1033E-02
617 0.5396E+02 0.9646E-03
618 0.5467E+02 0.9008E-03
619 0.5538E+02 0.8411E-03
620 0.5609E+02 0.7852E-03
621 0.5680E+02 0.7327E-03
622 0.5751E+02 0.6831E-03
623 0.5822E+02 0.6360E-03
624 0.5893E+02 0.5909E-03
625 0.5964E+02 0.5475E-03
626 0.6035E+02 0.5055E-03
627 0.6106E+02 0.4646E-03
628 0.6177E+02 0.4245E-03
629 0.6248E+02 0.3853E-03
630 0.6319E+02 0.3467E-03
631 0.6390E+02 0.3089E-03
632 0.6461E+02 0.2719E-03
633 0.6532E+02 0.2357E-03
634 0.6603E+02 0.2007E-03
635 0.6674E+02 0.1669E-03
636 0.6745E+02 0.1345E-03
637 0.6816E+02 0.1038E-03
638 0.6887E+02 0.7482E-04
639 0.6958E+02 0.4782E-04
640 0.7029E+02 0.2286E-04"""}
641 form = TaskForm_remd_a(initial=data)
643 form = TaskForm_remd_a(request.POST,request.FILES)
645 task.name=form.cleaned_data["name"]
648 basename = str(task.owner)
649 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
650 task.jobdirname = "_".join([basename, suffix])
652 pdbid=form.cleaned_data["pdbid"]
654 task.myfile1=load_pdbid(pdbid,task.jobdirname)
657 task.myfile1=form.cleaned_data["file1"]
658 task.md_start=form.cleaned_data["md_start"]
659 task.md_pdbref=form.cleaned_data["md_pdbref"]
662 if task.md_start == "pdbstart" or task.md_pdbref:
663 seq,task.ssbond=from_pdb(task.myfile1)
664 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
666 seq=seq_add_x(form.cleaned_data["md_seq"])
667 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
669 for i in range(0,len(seq),40):
670 task.md_seq=task.md_seq+seq[i:i+40]+" "
672 if task.md_start != "pdbstart":
675 task.md_seed=form.cleaned_data["md_seed"]
676 task.md_nstep=form.cleaned_data["md_nstep"]
677 task.md_total_steps=task.md_nstep
678 task.md_dt=form.cleaned_data["md_dt"]
679 task.md_lang=form.cleaned_data["md_lang"]
680 task.md_tau=form.cleaned_data["md_tau"]
681 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
682 task.min_maxfun=form.cleaned_data["min_maxfun"]
683 task.remd_nrep=form.cleaned_data["remd_nrep"]
684 task.remd_nstex=form.cleaned_data["remd_nstex"]
685 task.md_ntwx=form.cleaned_data["md_ntwx"]
686 task.md_ntwe=form.cleaned_data["md_ntwe"]
687 task.md_respa=form.cleaned_data["md_respa"]
688 if any(c.islower() for c in seq):
692 # task.remd_traj1file=form.cleaned_data["remd_traj1file"]
693 # task.remd_rest1file=form.cleaned_data["remd_rest1file"]
695 task.boxx=form.cleaned_data["boxx"]
696 task.boxy=form.cleaned_data["boxy"]
697 task.boxz=form.cleaned_data["boxz"]
699 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
700 task.unres_ff=form.cleaned_data["unres_ff"]
702 task.scal_rad = form.cleaned_data["scal_rad"]
703 task.saxs_data = form.cleaned_data["saxs_data"]
704 task.wsaxs = form.cleaned_data["wsaxs"]
707 return redirect('addmlist',task_id=task.id)
709 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
710 form = TaskForm_remd_a(initial=data)
712 p_type='replica exchange molecular dynamics - advanced options'
713 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
716 def add_dock(request,task_id):
717 task = get_object_or_404(Task, id=task_id)
718 if request.method == 'POST':
719 if '_example' in request.POST:
720 data= {'name':task.name,'pdbid':'1L2Y','md_seed':-39912345}
721 form = TaskForm_dock(initial=data)
723 form = TaskForm_dock(request.POST,request.FILES)
725 task.name=form.cleaned_data["name"]
728 basename = str(task.owner)
729 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
730 task.jobdirname = "_".join([basename, suffix])
732 pdbid=form.cleaned_data["pdbid"]
734 task.myfile1=load_pdbid(pdbid,task.jobdirname)
737 task.myfile1=form.cleaned_data["file1"]
739 pdbid2=form.cleaned_data["pdbid2"]
741 task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
744 task.myfile2=form.cleaned_data["file2"]
746 task.md_ntwx=task.remd_nstex
747 task.md_start="pdbstart"
754 seq1,ssbond1=from_pdb(task.myfile1)
755 seq2,ssbond2=from_pdb(task.myfile2)
757 if seq1[-1]=='X' and seq2[0]=='X':
759 elif seq1[-1]!='X' and seq2[0]!='X':
764 for i in range(0,len(seq),40):
765 task.md_seq=task.md_seq+seq[i:i+40]+" "
767 task.md_seed=form.cleaned_data["md_seed"]
769 task.md_nstep=form.cleaned_data["md_nstep"]
771 if any(c.islower() for c in seq):
780 if is_lazy_user(request.user):
781 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
785 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
786 form = TaskForm_dock(initial=data)
789 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
792 def add_dock_a(request,task_id):
793 task = get_object_or_404(Task, id=task_id)
794 if request.method == 'POST':
795 if '_example' in request.POST:
796 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
797 form = TaskForm_remd(initial=data)
799 form = TaskForm_remd(request.POST,request.FILES)
801 task.name=form.cleaned_data["name"]
803 task.md_start=form.cleaned_data["md_start"]
805 basename = str(task.owner)
806 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
807 task.jobdirname = "_".join([basename, suffix])
809 pdbid=form.cleaned_data["pdbid"]
811 task.myfile1=load_pdbid(pdbid,task.jobdirname)
814 task.myfile1=form.cleaned_data["file1"]
815 task.md_pdbref=form.cleaned_data["md_pdbref"]
816 task.md_ntwx=task.remd_nstex
819 if task.md_start == "pdbstart" or task.md_pdbref:
820 seq,task.ssbond=from_pdb(task.myfile1)
822 seq=seq_add_x(form.cleaned_data["md_seq"])
823 for i in range(0,len(seq),40):
824 task.md_seq=task.md_seq+seq[i:i+40]+" "
826 if task.md_start != "pdbstart":
829 task.md_seed=form.cleaned_data["md_seed"]
831 task.md_nstep=form.cleaned_data["md_nstep"]
833 if any(c.islower() for c in seq):
842 if is_lazy_user(request.user):
843 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
847 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
848 form = TaskForm_remd(initial=data)
850 p_type='docking - advanced options'
851 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
856 def addmlist(request,task_id):
857 task = get_object_or_404(Task, id=task_id)
858 if request.method == 'POST':
859 form = TaskForm_list(task.remd_nrep,request.POST)
861 task.remd_multi_t=form.cleaned_data["temperatures"]
862 task.remd_multi_m=form.cleaned_data["multiplexing"]
866 if is_lazy_user(request.user):
867 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
871 if task.example == 'casp12':
872 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
873 '["2", "2", "2", "2", "2", "2", "2", "2"]',
875 '["270", "280", "290", "300", "310", "320", "330", "340"]'
877 elif task.unres_ff == 'FF2':
878 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
879 '["1", "1", "1", "1", "1", "1", "1", "1"]',
881 '["270", "280", "290", "300", "310", "320", "330", "345"]'
884 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
885 '["1", "1", "1", "1", "1", "1", "1", "1"]',
887 '["250", "260", "270", "280", "290", "300", "315", "330"]'
890 form = TaskForm_list(task.remd_nrep,initial=data)
891 p_type='replica exchange molecular dynamics - advanced options'
892 return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
895 def details(request,task_id):
896 task = get_object_or_404(Task, id=task_id)
897 return render(request, "details.html",{'task':task})
900 def details1(request,user_id,task_id):
901 task = get_object_or_404(Task, id=task_id)
902 return render(request, "details1.html",{'task':task})
906 def delete(request, task_id):
907 Task.objects.get(id=task_id).delete()
911 def restart(request, task_id):
912 task = get_object_or_404(Task, id=task_id)
916 def add_restart_inp():
917 with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
919 if 'reset_vel=' in line:
920 f2.write('{:79}'.format('restart'+line[7:]))
923 os.remove('file.inp')
924 os.rename('file.inp.tmp','file.inp')
928 if os.path.isfile(task.jobdirname+'/finished'):
929 os.remove(task.jobdirname+'/finished')
932 task.md_total_steps = task.md_total_steps+task.md_nstep
934 if task.type == 'md':
935 os.chdir(task.jobdirname)
937 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
939 elif task.type == 'remd':
940 os.chdir(task.jobdirname)
942 tmp1=json.loads(task.remd_multi_m)
943 nreplicas=sum(map(int, tmp1))
944 with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
946 if 'rec_end=' in line:
947 rec=task.md_total_steps/task.md_ntwx
948 f2.write('nfile_cx=1 rec_start='+str(rec/10)
949 +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
950 elif 'isampl=' in line:
951 if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
954 isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
955 f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
958 os.remove('file_wham.inp')
959 os.rename('file_wham.tmp','file_wham.inp')
960 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
964 def restart1(request, user_id, task_id):
965 task = get_object_or_404(Task, id=task_id)
968 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
971 def refresh_done1(request, task_id):
972 task = get_object_or_404(Task, id=task_id)
976 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
979 for line in proc.stdout:
980 if 'piasek4' in line:
981 if line.split()[1]=='test_server':
983 if line.split()[-2]=='Q':
985 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
987 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
991 def refresh_done(request):
993 tasks = Task.objects.filter(owner=user).order_by('-created_date')
1000 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1003 for line in proc.stdout:
1004 if 'piasek4' in line:
1005 if line.split()[1]=='test_server':
1007 if line.split()[-2]=='Q':
1009 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1011 if is_lazy_user(request.user):
1012 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1014 return render(request, "index.html", {
1016 'variable' : variable,
1021 def refresh_done0(task):
1022 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
1025 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1027 if task.type=='min' or task.type=='md':
1031 task.etot=line.split()[1]
1033 if 'RMS deviation' in line:
1041 if 'Total wall' in line:
1044 elif task.type=='remd' or task.type=='dock':
1046 text="Acceptance for replica exchanges and number of exchange attempts\n"
1051 text=text+' '.join(line.split()[2:])+"\n"
1052 if j==task.remd_nrep:
1054 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
1056 if 'Total wall' in line:
1059 task.results_text=text
1062 if task.md_pdbref and task.type=='remd':
1064 for i in range(1,6):
1066 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
1069 task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
1071 task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
1073 task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
1075 task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
1077 task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
1078 except EnvironmentError:
1079 print 'file_wham_T*pdb open error'
1080 for i in range(1,6):
1081 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1084 if 'RMSD of the common residues=' in line:
1085 text=' RMSD='+line.split()[5]
1086 if 'TM-score =' in line:
1087 text=text+' TMscore='+line.split()[2]
1088 if 'GDT-TS-score=' in line:
1089 text=text+' GDT_TS='+line.split()[1]
1092 task.remd_model1=task.remd_model1+text
1094 task.remd_model2=task.remd_model2+text
1096 task.remd_model3=task.remd_model3+text
1098 task.remd_model4=task.remd_model4+text
1100 task.remd_model5=task.remd_model5+text
1104 if task.type=='remd':
1105 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1108 if 'sumprob' in line:
1115 task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
1117 task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
1119 task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
1121 task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
1123 task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
1128 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1129 if (task.type=='min'):
1131 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1136 last = line.split()[0]
1140 task.running=int(1+int(last)*100.0/task.min_maxmin)
1143 if task.running>100:
1146 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1151 last = line.split()[0]
1154 task.running=int(1+int(last)*100.0/task.md_nstep)
1155 if task.running>100: