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 tasks_count = Task.objects.filter(owner=user).count()
165 return render(request, "index.html", {
166 'tasks': tasks, 'alldone': 0, 'tasks_count':tasks_count
171 if request.method == 'POST':
172 form = TaskForm(request.POST)
174 name = form.cleaned_data["name"]
176 task = Task(name=name,owner=user,ready=False)
178 return redirect('add_min',task_id=task.id)
182 def add_min(request,task_id):
183 task = get_object_or_404(Task, id=task_id)
184 if request.method == 'POST':
185 if '_example' in request.POST:
186 data= {'name':task.name,'pdbid':'1BDD'}
187 form = TaskForm_min(initial=data)
189 form = TaskForm_min(request.POST,request.FILES)
191 task.name=form.cleaned_data["name"]
193 pdbid=form.cleaned_data["pdbid"]
195 basename = str(task.owner)
196 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
197 task.jobdirname = "_".join([basename, suffix])
200 task.myfile1=load_pdbid(pdbid,task.jobdirname)
203 task.myfile1=form.cleaned_data["file1"]
205 seq,task.ssbond=from_pdb(task.myfile1)
207 for i in range(0,len(seq),40):
208 task.md_seq=task.md_seq+seq[i:i+40]+" "
213 if is_lazy_user(request.user):
214 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
218 data= {'name':task.name}
219 form = TaskForm_min(initial=data)
220 p_type='minimization'
222 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
225 def add_min_a(request,task_id):
226 task = get_object_or_404(Task, id=task_id)
227 if request.method == 'POST':
228 if '_example' in request.POST:
229 data= {'name':task.name,'pdbid':'1EI0','unres_ff':'opt-wtfsa-2'}
230 form = TaskForm_min_a(initial=data)
232 form = TaskForm_min_a(request.POST,request.FILES)
234 task.name=form.cleaned_data["name"]
236 # task.min_choice=form.cleaned_data["min_choice"]
237 task.min_overlap=form.cleaned_data["min_overlap"]
238 task.min_searchsc=form.cleaned_data["min_searchsc"]
239 task.min_maxmin=form.cleaned_data["min_maxmin"]
240 task.min_maxfun=form.cleaned_data["min_maxfun"]
241 task.min_pdbout=form.cleaned_data["min_pdbout"]
243 basename = str(task.owner)
244 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
245 task.jobdirname = "_".join([basename, suffix])
247 pdbid=form.cleaned_data["pdbid"]
249 task.myfile1=load_pdbid(pdbid,task.jobdirname)
252 task.myfile1=form.cleaned_data["file1"]
254 task.min_unres_pdb=form.cleaned_data["min_unres_pdb"]
255 task.unres_ff=form.cleaned_data["unres_ff"]
256 task.boxx=form.cleaned_data["boxx"]
257 task.boxy=form.cleaned_data["boxy"]
258 task.boxz=form.cleaned_data["boxz"]
260 seq,task.ssbond=from_pdb(task.myfile1)
262 for i in range(0,len(seq),40):
263 task.md_seq=task.md_seq+seq[i:i+40]+" "
268 if is_lazy_user(request.user):
269 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
273 data= {'name':task.name}
274 form = TaskForm_min_a(initial=data)
276 p_type='minimization - advanced options'
277 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
280 def add_md(request,task_id):
281 task = get_object_or_404(Task, id=task_id)
282 if request.method == 'POST':
283 if '_example' in request.POST:
284 data= {'name':task.name,'pdbid':'1IGD','md_start':'pdbstart',
285 'md_pdbref':True,'md_temp':200,'md_seed':-39912345}
286 form = TaskForm_md(initial=data)
288 form = TaskForm_md(request.POST,request.FILES)
290 task.name=form.cleaned_data["name"]
292 task.md_seed=form.cleaned_data["md_seed"]
293 task.md_start=form.cleaned_data["md_start"]
294 task.md_temp=form.cleaned_data["md_temp"]
295 task.md_nstep=form.cleaned_data["md_nstep"]
296 task.md_total_steps=task.md_nstep
297 if task.md_nstep<250000:
300 basename = str(task.owner)
301 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
302 task.jobdirname = "_".join([basename, suffix])
304 pdbid=form.cleaned_data["pdbid"]
306 task.myfile1=load_pdbid(pdbid,task.jobdirname)
309 task.myfile1=form.cleaned_data["file1"]
310 task.md_pdbref=form.cleaned_data["md_pdbref"]
313 if task.md_start == "pdbstart" or task.md_pdbref:
314 seq,task.ssbond=from_pdb(task.myfile1)
316 seq=seq_add_x(form.cleaned_data["md_seq"])
318 for i in range(0,len(seq),40):
319 task.md_seq=task.md_seq+seq[i:i+40]+" "
321 if task.md_start != "pdbstart":
324 if any(c.islower() for c in seq):
331 if is_lazy_user(request.user):
332 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
336 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
337 form = TaskForm_md(initial=data)
339 p_type='molecular dynamics'
340 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
343 def add_md_a(request,task_id):
344 task = get_object_or_404(Task, id=task_id)
345 if request.method == 'POST':
346 if '_example' in request.POST:
347 data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf',
348 'md_pdbref':True,'md_mdpdb':True,'md_seed':-39912345}
349 form = TaskForm_md_a(initial=data)
351 form = TaskForm_md_a(request.POST,request.FILES)
353 task.name=form.cleaned_data["name"]
356 basename = str(task.owner)
357 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
358 task.jobdirname = "_".join([basename, suffix])
360 pdbid=form.cleaned_data["pdbid"]
362 task.myfile1=load_pdbid(pdbid,task.jobdirname)
365 task.myfile1=form.cleaned_data["file1"]
366 task.md_start=form.cleaned_data["md_start"]
367 task.md_pdbref=form.cleaned_data["md_pdbref"]
370 if task.md_start == "pdbstart" or task.md_pdbref:
371 seq,task.ssbond=from_pdb(task.myfile1)
372 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
374 seq=seq_add_x(form.cleaned_data["md_seq"])
375 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
377 for i in range(0,len(seq),40):
378 task.md_seq=task.md_seq+seq[i:i+40]+" "
380 if task.md_start != "pdbstart":
383 task.md_seed=form.cleaned_data["md_seed"]
385 task.md_temp=form.cleaned_data["md_temp"]
386 task.md_nstep=form.cleaned_data["md_nstep"]
387 task.md_total_steps=task.md_nstep
388 task.md_ntwe=form.cleaned_data["md_ntwe"]
389 task.md_ntwx=form.cleaned_data["md_ntwx"]
390 task.md_dt=form.cleaned_data["md_dt"]
391 task.md_lang=form.cleaned_data["md_lang"]
392 task.md_tau=form.cleaned_data["md_tau"]
393 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
394 task.md_mdpdb=form.cleaned_data["md_mdpdb"]
395 task.unres_ff=form.cleaned_data["unres_ff"]
396 task.md_respa=form.cleaned_data["md_respa"]
397 if any(c.islower() for c in seq):
400 task.boxx=form.cleaned_data["boxx"]
401 task.boxy=form.cleaned_data["boxy"]
402 task.boxz=form.cleaned_data["boxz"]
408 if is_lazy_user(request.user):
409 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
413 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
414 form = TaskForm_md_a(initial=data)
416 p_type='molecular dynamics - advanced options'
417 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
420 def add_remd(request,task_id):
421 task = get_object_or_404(Task, id=task_id)
422 if request.method == 'POST':
423 if '_example' in request.POST:
424 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
425 form = TaskForm_remd(initial=data)
427 form = TaskForm_remd(request.POST,request.FILES)
429 task.name=form.cleaned_data["name"]
431 task.md_start=form.cleaned_data["md_start"]
433 basename = str(task.owner)
434 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
435 task.jobdirname = "_".join([basename, suffix])
437 pdbid=form.cleaned_data["pdbid"]
439 task.myfile1=load_pdbid(pdbid,task.jobdirname)
442 task.myfile1=form.cleaned_data["file1"]
443 task.md_pdbref=form.cleaned_data["md_pdbref"]
444 task.md_ntwx=task.remd_nstex
447 if task.md_start == "pdbstart" or task.md_pdbref:
448 seq,task.ssbond=from_pdb(task.myfile1)
450 seq=seq_add_x(form.cleaned_data["md_seq"])
451 for i in range(0,len(seq),40):
452 task.md_seq=task.md_seq+seq[i:i+40]+" "
454 if task.md_start != "pdbstart":
457 task.md_seed=form.cleaned_data["md_seed"]
459 task.md_nstep=form.cleaned_data["md_nstep"]
460 task.md_total_steps=task.md_nstep
462 if any(c.islower() for c in seq):
471 if is_lazy_user(request.user):
472 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
476 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
477 form = TaskForm_remd(initial=data)
479 p_type='replica exchange molecular dynamics'
480 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
483 def add_remd_a(request,task_id):
484 from django.core.files.uploadedfile import UploadedFile
485 task = get_object_or_404(Task, id=task_id)
486 if request.method == 'POST':
487 if '_example' in request.POST:
488 data= {'name':task.name,'pdbid':'5G3Q:B','md_pdbref':True,
489 'md_nstep':2000000,'md_lang':'berendsen','unres_ff':'FF2','md_seed':-39912345,
490 'remd_cluter_temp':290,'md_2d':'--EEEEEEE------EEEEEE------EEEEEE------HHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHH---'}
491 form = TaskForm_remd_a(initial=data)
492 task.example='casp12'
494 elif '_example_saxs' in request.POST:
495 data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True,
496 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
497 'remd_cluter_temp':270,
498 'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
536 form = TaskForm_remd_a(initial=data)
537 elif '_example_saxs1' in request.POST:
538 data= {'name':task.name,'pdbid':'2KMS','md_pdbref':True,'md_start':'pdbstart',
539 'md_2d':'----EEEEEE-EEEEE-------EEEEEEEEE--EEEEEE-EEEE---EEEEEEEEE-----EEEEEEE-EEE-HHHHH-EEEE-EEEEEEEEE----EEEEEE---EEE-----',
540 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
541 'remd_cluter_temp':280, 'min_maxfun':50,
542 'scal_rad':5.0,'wsaxs':1000.0,'saxs_data':
543 """0.7100E-00 0.2036E-03
544 0.1420E+01 0.4221E-03
545 0.2130E+01 0.6548E-03
546 0.2840E+01 0.9001E-03
547 0.3550E+01 0.1156E-02
548 0.4260E+01 0.1421E-02
549 0.4970E+01 0.1692E-02
550 0.5680E+01 0.1965E-02
551 0.6390E+01 0.2239E-02
552 0.7100E+01 0.2509E-02
553 0.7810E+01 0.2772E-02
554 0.8520E+01 0.3025E-02
555 0.9230E+01 0.3265E-02
556 0.9940E+01 0.3489E-02
557 0.1065E+02 0.3694E-02
558 0.1136E+02 0.3878E-02
559 0.1207E+02 0.4039E-02
560 0.1278E+02 0.4177E-02
561 0.1349E+02 0.4289E-02
562 0.1420E+02 0.4377E-02
563 0.1491E+02 0.4439E-02
564 0.1562E+02 0.4478E-02
565 0.1633E+02 0.4493E-02
566 0.1704E+02 0.4487E-02
567 0.1775E+02 0.4461E-02
568 0.1846E+02 0.4418E-02
569 0.1917E+02 0.4361E-02
570 0.1988E+02 0.4291E-02
571 0.2059E+02 0.4211E-02
572 0.2130E+02 0.4125E-02
573 0.2201E+02 0.4034E-02
574 0.2272E+02 0.3942E-02
575 0.2343E+02 0.3850E-02
576 0.2414E+02 0.3761E-02
577 0.2485E+02 0.3677E-02
578 0.2556E+02 0.3598E-02
579 0.2627E+02 0.3526E-02
580 0.2698E+02 0.3462E-02
581 0.2769E+02 0.3405E-02
582 0.2840E+02 0.3356E-02
583 0.2911E+02 0.3315E-02
584 0.2982E+02 0.3280E-02
585 0.3053E+02 0.3251E-02
586 0.3124E+02 0.3226E-02
587 0.3195E+02 0.3205E-02
588 0.3266E+02 0.3186E-02
589 0.3337E+02 0.3167E-02
590 0.3408E+02 0.3147E-02
591 0.3479E+02 0.3125E-02
592 0.3550E+02 0.3099E-02
593 0.3621E+02 0.3068E-02
594 0.3692E+02 0.3031E-02
595 0.3763E+02 0.2987E-02
596 0.3834E+02 0.2937E-02
597 0.3905E+02 0.2878E-02
598 0.3976E+02 0.2812E-02
599 0.4047E+02 0.2739E-02
600 0.4118E+02 0.2658E-02
601 0.4189E+02 0.2571E-02
602 0.4260E+02 0.2478E-02
603 0.4331E+02 0.2381E-02
604 0.4402E+02 0.2279E-02
605 0.4473E+02 0.2174E-02
606 0.4544E+02 0.2068E-02
607 0.4615E+02 0.1960E-02
608 0.4686E+02 0.1853E-02
609 0.4757E+02 0.1748E-02
610 0.4828E+02 0.1644E-02
611 0.4899E+02 0.1544E-02
612 0.4970E+02 0.1447E-02
613 0.5041E+02 0.1355E-02
614 0.5112E+02 0.1267E-02
615 0.5183E+02 0.1184E-02
616 0.5254E+02 0.1106E-02
617 0.5325E+02 0.1033E-02
618 0.5396E+02 0.9646E-03
619 0.5467E+02 0.9008E-03
620 0.5538E+02 0.8411E-03
621 0.5609E+02 0.7852E-03
622 0.5680E+02 0.7327E-03
623 0.5751E+02 0.6831E-03
624 0.5822E+02 0.6360E-03
625 0.5893E+02 0.5909E-03
626 0.5964E+02 0.5475E-03
627 0.6035E+02 0.5055E-03
628 0.6106E+02 0.4646E-03
629 0.6177E+02 0.4245E-03
630 0.6248E+02 0.3853E-03
631 0.6319E+02 0.3467E-03
632 0.6390E+02 0.3089E-03
633 0.6461E+02 0.2719E-03
634 0.6532E+02 0.2357E-03
635 0.6603E+02 0.2007E-03
636 0.6674E+02 0.1669E-03
637 0.6745E+02 0.1345E-03
638 0.6816E+02 0.1038E-03
639 0.6887E+02 0.7482E-04
640 0.6958E+02 0.4782E-04
641 0.7029E+02 0.2286E-04"""}
642 form = TaskForm_remd_a(initial=data)
644 form = TaskForm_remd_a(request.POST,request.FILES)
646 task.name=form.cleaned_data["name"]
649 basename = str(task.owner)
650 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
651 task.jobdirname = "_".join([basename, suffix])
653 pdbid=form.cleaned_data["pdbid"]
655 task.myfile1=load_pdbid(pdbid,task.jobdirname)
658 task.myfile1=form.cleaned_data["file1"]
659 task.md_start=form.cleaned_data["md_start"]
660 task.md_pdbref=form.cleaned_data["md_pdbref"]
663 if task.md_start == "pdbstart" or task.md_pdbref:
664 seq,task.ssbond=from_pdb(task.myfile1)
665 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
667 seq=seq_add_x(form.cleaned_data["md_seq"])
668 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
670 for i in range(0,len(seq),40):
671 task.md_seq=task.md_seq+seq[i:i+40]+" "
673 if task.md_start != "pdbstart":
676 task.md_seed=form.cleaned_data["md_seed"]
677 task.md_nstep=form.cleaned_data["md_nstep"]
678 task.md_total_steps=task.md_nstep
679 task.md_dt=form.cleaned_data["md_dt"]
680 task.md_lang=form.cleaned_data["md_lang"]
681 task.md_tau=form.cleaned_data["md_tau"]
682 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
683 task.min_maxfun=form.cleaned_data["min_maxfun"]
684 task.remd_nrep=form.cleaned_data["remd_nrep"]
685 task.remd_nstex=form.cleaned_data["remd_nstex"]
686 task.md_ntwx=form.cleaned_data["md_ntwx"]
687 task.md_ntwe=form.cleaned_data["md_ntwe"]
688 task.md_respa=form.cleaned_data["md_respa"]
689 if any(c.islower() for c in seq):
693 # task.remd_traj1file=form.cleaned_data["remd_traj1file"]
694 # task.remd_rest1file=form.cleaned_data["remd_rest1file"]
696 task.boxx=form.cleaned_data["boxx"]
697 task.boxy=form.cleaned_data["boxy"]
698 task.boxz=form.cleaned_data["boxz"]
700 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
701 task.unres_ff=form.cleaned_data["unres_ff"]
703 task.scal_rad = form.cleaned_data["scal_rad"]
704 task.saxs_data = form.cleaned_data["saxs_data"]
705 task.wsaxs = form.cleaned_data["wsaxs"]
708 return redirect('addmlist',task_id=task.id)
710 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
711 form = TaskForm_remd_a(initial=data)
713 p_type='replica exchange molecular dynamics - advanced options'
714 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
717 def add_dock(request,task_id):
718 task = get_object_or_404(Task, id=task_id)
719 if request.method == 'POST':
720 if '_example' in request.POST:
721 data= {'name':task.name,'pdbid':'1L2Y','md_seed':-39912345}
722 form = TaskForm_dock(initial=data)
724 form = TaskForm_dock(request.POST,request.FILES)
726 task.name=form.cleaned_data["name"]
729 basename = str(task.owner)
730 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
731 task.jobdirname = "_".join([basename, suffix])
733 pdbid=form.cleaned_data["pdbid"]
735 task.myfile1=load_pdbid(pdbid,task.jobdirname)
738 task.myfile1=form.cleaned_data["file1"]
740 pdbid2=form.cleaned_data["pdbid2"]
742 task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
745 task.myfile2=form.cleaned_data["file2"]
747 task.md_ntwx=task.remd_nstex
748 task.md_start="pdbstart"
755 seq1,ssbond1=from_pdb(task.myfile1)
756 seq2,ssbond2=from_pdb(task.myfile2)
758 if seq1[-1]=='X' and seq2[0]=='X':
760 elif seq1[-1]!='X' and seq2[0]!='X':
765 for i in range(0,len(seq),40):
766 task.md_seq=task.md_seq+seq[i:i+40]+" "
768 task.md_seed=form.cleaned_data["md_seed"]
770 task.md_nstep=form.cleaned_data["md_nstep"]
772 if any(c.islower() for c in seq):
781 if is_lazy_user(request.user):
782 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
786 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
787 form = TaskForm_dock(initial=data)
790 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
793 def add_dock_a(request,task_id):
794 task = get_object_or_404(Task, id=task_id)
795 if request.method == 'POST':
796 if '_example' in request.POST:
797 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
798 form = TaskForm_remd(initial=data)
800 form = TaskForm_remd(request.POST,request.FILES)
802 task.name=form.cleaned_data["name"]
804 task.md_start=form.cleaned_data["md_start"]
806 basename = str(task.owner)
807 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
808 task.jobdirname = "_".join([basename, suffix])
810 pdbid=form.cleaned_data["pdbid"]
812 task.myfile1=load_pdbid(pdbid,task.jobdirname)
815 task.myfile1=form.cleaned_data["file1"]
816 task.md_pdbref=form.cleaned_data["md_pdbref"]
817 task.md_ntwx=task.remd_nstex
820 if task.md_start == "pdbstart" or task.md_pdbref:
821 seq,task.ssbond=from_pdb(task.myfile1)
823 seq=seq_add_x(form.cleaned_data["md_seq"])
824 for i in range(0,len(seq),40):
825 task.md_seq=task.md_seq+seq[i:i+40]+" "
827 if task.md_start != "pdbstart":
830 task.md_seed=form.cleaned_data["md_seed"]
832 task.md_nstep=form.cleaned_data["md_nstep"]
834 if any(c.islower() for c in seq):
843 if is_lazy_user(request.user):
844 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
848 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
849 form = TaskForm_remd(initial=data)
851 p_type='docking - advanced options'
852 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
857 def addmlist(request,task_id):
858 task = get_object_or_404(Task, id=task_id)
859 if request.method == 'POST':
860 form = TaskForm_list(task.remd_nrep,request.POST)
862 task.remd_multi_t=form.cleaned_data["temperatures"]
863 task.remd_multi_m=form.cleaned_data["multiplexing"]
867 if is_lazy_user(request.user):
868 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
872 if task.example == 'casp12':
873 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
874 '["2", "2", "2", "2", "2", "2", "2", "2"]',
876 '["270", "280", "290", "300", "310", "320", "330", "340"]'
878 elif task.unres_ff == 'FF2':
879 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
880 '["1", "1", "1", "1", "1", "1", "1", "1"]',
882 '["270", "280", "290", "300", "310", "320", "330", "345"]'
885 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
886 '["1", "1", "1", "1", "1", "1", "1", "1"]',
888 '["250", "260", "270", "280", "290", "300", "315", "330"]'
891 form = TaskForm_list(task.remd_nrep,initial=data)
892 p_type='replica exchange molecular dynamics - advanced options'
893 return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
896 def details(request,task_id):
897 task = get_object_or_404(Task, id=task_id)
898 return render(request, "details.html",{'task':task})
901 def details1(request,user_id,task_id):
902 task = get_object_or_404(Task, id=task_id)
903 return render(request, "details1.html",{'task':task})
907 def delete(request, task_id):
908 Task.objects.get(id=task_id).delete()
912 def restart(request, task_id):
913 task = get_object_or_404(Task, id=task_id)
917 def add_restart_inp():
918 with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
920 if 'reset_vel=' in line:
921 f2.write('{:79}'.format('restart'+line[7:]))
924 os.remove('file.inp')
925 os.rename('file.inp.tmp','file.inp')
929 if os.path.isfile(task.jobdirname+'/finished'):
930 os.remove(task.jobdirname+'/finished')
933 task.md_total_steps = task.md_total_steps+task.md_nstep
935 if task.type == 'md':
936 os.chdir(task.jobdirname)
938 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
940 elif task.type == 'remd':
941 os.chdir(task.jobdirname)
943 tmp1=json.loads(task.remd_multi_m)
944 nreplicas=sum(map(int, tmp1))
945 with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
947 if 'rec_end=' in line:
948 rec=task.md_total_steps/task.md_ntwx
949 f2.write('nfile_cx=1 rec_start='+str(rec/10)
950 +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
951 elif 'isampl=' in line:
952 if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
955 isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
956 f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
959 os.remove('file_wham.inp')
960 os.rename('file_wham.tmp','file_wham.inp')
961 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
965 def restart1(request, user_id, task_id):
966 task = get_object_or_404(Task, id=task_id)
969 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
972 def refresh_done1(request, task_id):
973 task = get_object_or_404(Task, id=task_id)
977 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
980 for line in proc.stdout:
981 if 'piasek4' in line:
982 if line.split()[1]=='test_server':
984 if line.split()[-2]=='Q':
986 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
988 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
992 def refresh_done(request):
994 tasks = Task.objects.filter(owner=user).order_by('-created_date')
995 tasks_count = Task.objects.filter(owner=user).count()
1002 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1005 for line in proc.stdout:
1006 if 'piasek4' in line:
1007 if line.split()[1]=='test_server':
1009 if line.split()[-2]=='Q':
1011 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1013 if is_lazy_user(request.user):
1014 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1016 return render(request, "index.html", {
1018 'variable' : variable,
1020 'tasks_count':tasks_count
1024 def refresh_done0(task):
1025 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
1028 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1030 if task.type=='min' or task.type=='md':
1034 task.etot=line.split()[1]
1036 if 'RMS deviation' in line:
1044 if 'Total wall' in line:
1047 elif task.type=='remd' or task.type=='dock':
1049 text="Acceptance for replica exchanges and number of exchange attempts\n"
1054 text=text+' '.join(line.split()[2:])+"\n"
1055 if j==task.remd_nrep:
1057 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
1059 if 'Total wall' in line:
1062 task.results_text=text
1065 if task.md_pdbref and task.type=='remd':
1067 for i in range(1,6):
1069 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
1072 task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
1074 task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
1076 task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
1078 task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
1080 task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
1081 except EnvironmentError:
1082 print 'file_wham_T*pdb open error'
1083 for i in range(1,6):
1084 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1087 if 'RMSD of the common residues=' in line:
1088 text=' RMSD='+line.split()[5]
1089 if 'TM-score =' in line:
1090 text=text+' TMscore='+line.split()[2]
1091 if 'GDT-TS-score=' in line:
1092 text=text+' GDT_TS='+line.split()[1]
1095 task.remd_model1=task.remd_model1+text
1097 task.remd_model2=task.remd_model2+text
1099 task.remd_model3=task.remd_model3+text
1101 task.remd_model4=task.remd_model4+text
1103 task.remd_model5=task.remd_model5+text
1107 if task.type=='remd':
1108 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1111 if 'sumprob' in line:
1118 task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
1120 task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
1122 task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
1124 task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
1126 task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
1131 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1132 if (task.type=='min'):
1134 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1139 last = line.split()[0]
1143 task.running=int(1+int(last)*100.0/task.min_maxmin)
1146 if task.running>100:
1149 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1154 last = line.split()[0]
1157 task.running=int(1+int(last)*100.0/task.md_nstep)
1158 if task.running>100: