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':'1BON:A','pdbid2':'1BON:B','md_seed':-12396738,'md_nstep':500000}
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"
749 task.remd_multi_m='["3", "3", "3", "3", "3", "3", "3", "3"]'
753 task.dock_peptide=form.cleaned_data["dock_peptide"]
757 seq1,ssbond1=from_pdb(task.myfile1)
758 seq2,ssbond2=from_pdb(task.myfile2)
760 if seq1[-1]=='X' and seq2[0]=='X':
762 elif seq1[-1]!='X' and seq2[0]!='X':
767 for i in range(0,len(seq),40):
768 task.md_seq=task.md_seq+seq[i:i+40]+" "
770 task.md_seed=form.cleaned_data["md_seed"]
772 task.md_nstep=form.cleaned_data["md_nstep"]
773 task.md_total_steps=task.md_nstep
775 if any(c.islower() for c in seq):
784 if is_lazy_user(request.user):
785 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
789 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
790 form = TaskForm_dock(initial=data)
793 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
796 def add_dock_a(request,task_id):
797 task = get_object_or_404(Task, id=task_id)
798 if request.method == 'POST':
799 if '_example' in request.POST:
800 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
801 form = TaskForm_dock_a(initial=data)
803 form = TaskForm_dock_a(request.POST,request.FILES)
805 task.name=form.cleaned_data["name"]
808 basename = str(task.owner)
809 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
810 task.jobdirname = "_".join([basename, suffix])
812 pdbid=form.cleaned_data["pdbid"]
814 task.myfile1=load_pdbid(pdbid,task.jobdirname)
817 task.myfile1=form.cleaned_data["file1"]
819 pdbid2=form.cleaned_data["pdbid2"]
821 task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
824 task.myfile2=form.cleaned_data["file2"]
826 task.md_ntwx=task.remd_nstex
827 task.md_start="pdbstart"
831 task.dock_peptide=form.cleaned_data["dock_peptide"]
835 seq1,ssbond1=from_pdb(task.myfile1)
836 seq2,ssbond2=from_pdb(task.myfile2)
838 if seq1[-1]=='X' and seq2[0]=='X':
840 elif seq1[-1]!='X' and seq2[0]!='X':
845 for i in range(0,len(seq),40):
846 task.md_seq=task.md_seq+seq[i:i+40]+" "
848 task.md_seed=form.cleaned_data["md_seed"]
850 task.md_nstep=form.cleaned_data["md_nstep"]
851 task.md_total_steps=task.md_nstep
853 task.md_dt=form.cleaned_data["md_dt"]
854 task.md_lang=form.cleaned_data["md_lang"]
855 task.md_tau=form.cleaned_data["md_tau"]
856 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
857 task.min_maxfun=form.cleaned_data["min_maxfun"]
858 task.remd_nrep=form.cleaned_data["remd_nrep"]
859 task.remd_nstex=form.cleaned_data["remd_nstex"]
860 task.md_ntwx=form.cleaned_data["md_ntwx"]
861 task.md_ntwe=form.cleaned_data["md_ntwe"]
863 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
864 task.unres_ff=form.cleaned_data["unres_ff"]
866 if any(c.islower() for c in seq):
871 return redirect('addmlist',task_id=task.id)
874 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
875 form = TaskForm_dock_a(initial=data)
877 p_type='docking - advanced options'
878 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
883 def addmlist(request,task_id):
884 task = get_object_or_404(Task, id=task_id)
885 if request.method == 'POST':
886 form = TaskForm_list(task.remd_nrep,request.POST)
888 task.remd_multi_t=form.cleaned_data["temperatures"]
889 task.remd_multi_m=form.cleaned_data["multiplexing"]
893 if is_lazy_user(request.user):
894 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
898 if task.example == 'casp12':
899 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
900 '["2", "2", "2", "2", "2", "2", "2", "2"]',
902 '["270", "280", "290", "300", "310", "320", "330", "340"]'
904 elif task.unres_ff == 'FF2':
905 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
906 '["1", "1", "1", "1", "1", "1", "1", "1"]',
908 '["270", "280", "290", "300", "310", "320", "330", "345"]'
911 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
912 '["1", "1", "1", "1", "1", "1", "1", "1"]',
914 '["250", "260", "270", "280", "290", "300", "315", "330"]'
917 form = TaskForm_list(task.remd_nrep,initial=data)
918 p_type='replica exchange molecular dynamics - advanced options'
919 return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
922 def details(request,task_id):
923 task = get_object_or_404(Task, id=task_id)
924 return render(request, "details.html",{'task':task})
927 def details1(request,user_id,task_id):
928 task = get_object_or_404(Task, id=task_id)
929 return render(request, "details1.html",{'task':task})
933 def delete(request, task_id):
934 Task.objects.get(id=task_id).delete()
938 def restart(request, task_id):
939 task = get_object_or_404(Task, id=task_id)
943 def add_restart_inp():
944 with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
946 if 'reset_vel=' in line:
947 f2.write('{:79}'.format('restart'+line[7:]))
950 os.remove('file.inp')
951 os.rename('file.inp.tmp','file.inp')
955 if os.path.isfile(task.jobdirname+'/finished'):
956 os.remove(task.jobdirname+'/finished')
959 task.md_total_steps = task.md_total_steps+task.md_nstep
961 if task.type == 'md':
962 os.chdir(task.jobdirname)
964 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
966 elif task.type == 'remd':
967 os.chdir(task.jobdirname)
969 tmp1=json.loads(task.remd_multi_m)
970 nreplicas=sum(map(int, tmp1))
971 with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
973 if 'rec_end=' in line:
974 rec=task.md_total_steps/task.md_ntwx
975 f2.write('nfile_cx=1 rec_start='+str(rec/10)
976 +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
977 elif 'isampl=' in line:
978 if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
981 isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
982 f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
985 os.remove('file_wham.inp')
986 os.rename('file_wham.tmp','file_wham.inp')
987 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
991 def restart1(request, user_id, task_id):
992 task = get_object_or_404(Task, id=task_id)
995 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
998 def refresh_done1(request, task_id):
999 task = get_object_or_404(Task, id=task_id)
1003 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1006 for line in proc.stdout:
1007 if 'piasek4' in line:
1008 if line.split()[1]=='test_server':
1010 if line.split()[-2]=='Q':
1012 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1014 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1018 def refresh_done(request):
1020 tasks = Task.objects.filter(owner=user).order_by('-created_date')
1021 tasks_count = Task.objects.filter(owner=user).count()
1028 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1031 for line in proc.stdout:
1032 if 'piasek4' in line:
1033 if line.split()[1]=='test_server':
1035 if line.split()[-2]=='Q':
1037 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1039 if is_lazy_user(request.user):
1040 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1042 return render(request, "index.html", {
1044 'variable' : variable,
1046 'tasks_count':tasks_count
1050 def refresh_done0(task):
1051 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
1054 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1056 if task.type=='min' or task.type=='md':
1060 task.etot=line.split()[1]
1062 if 'RMS deviation' in line:
1070 if 'Total wall' in line:
1073 elif task.type=='remd' or task.type=='dock':
1075 text="Acceptance for replica exchanges and number of exchange attempts\n"
1080 text=text+' '.join(line.split()[2:])+"\n"
1081 if j==task.remd_nrep:
1083 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
1085 if 'Total wall' in line:
1088 task.results_text=text
1091 if task.md_pdbref and task.type=='remd' or task.type=='dock':
1093 for i in range(1,6):
1095 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
1098 task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
1100 task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
1102 task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
1104 task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
1106 task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
1107 except EnvironmentError:
1108 print 'file_wham_T*pdb open error'
1109 for i in range(1,6):
1110 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1113 if 'RMSD of the common residues=' in line:
1114 text=' RMSD='+line.split()[5]
1115 if 'TM-score =' in line:
1116 text=text+' TMscore='+line.split()[2]
1117 if 'GDT-TS-score=' in line:
1118 text=text+' GDT_TS='+line.split()[1]
1121 task.remd_model1=task.remd_model1+text
1123 task.remd_model2=task.remd_model2+text
1125 task.remd_model3=task.remd_model3+text
1127 task.remd_model4=task.remd_model4+text
1129 task.remd_model5=task.remd_model5+text
1131 if task.type=='dock':
1132 for i in range(1,6):
1133 with open(task.jobdirname+'/dockq_'+str(i)+'.out', 'r') as f:
1137 text=' Fnat='+line.split()[1]
1139 text=text+' iRMS='+line.split()[1]
1141 text=text+' LRMS='+line.split()[1]
1142 if 'CAPRI' in line and not 'DockQ_CAPRI' in line:
1143 text=text+' CAPRI='+line.split()[1]
1144 if 'DockQ_CAPRI' in line:
1145 text=text+' DockQ_CAPRI= '+line.split()[1]
1146 if 'DockQ ' in line:
1147 text=text+' DockQ='+line.split()[1]
1150 task.remd_model1=task.remd_model1+text
1152 task.remd_model2=task.remd_model2+text
1154 task.remd_model3=task.remd_model3+text
1156 task.remd_model4=task.remd_model4+text
1158 task.remd_model5=task.remd_model5+text
1161 if task.type=='remd' or task.type=='dock':
1162 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1165 if 'sumprob' in line:
1172 task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[-2]
1174 task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[-2]
1176 task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[-2]
1178 task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[-2]
1180 task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[-2]
1185 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1186 if (task.type=='min'):
1188 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1193 last = line.split()[0]
1197 task.running=int(1+int(last)*100.0/task.min_maxmin)
1200 if task.running>100:
1203 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1208 last = line.split()[0]
1211 task.running=int(1+int(last)*100.0/task.md_nstep)
1212 if task.running>100:
1220 def zip_all_files(request, task_id):
1222 from django.http import HttpResponse
1223 from wsgiref.util import FileWrapper
1224 from django.core.files.temp import NamedTemporaryFile
1226 task = get_object_or_404(Task, id=task_id)
1228 temp=NamedTemporaryFile()
1229 archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
1230 for (dirpath, dirnames, filenames) in os.walk(task.jobdirname):
1231 for file1 in filenames:
1232 archive.write(dirpath+"/"+file1,file1)
1235 wrapper = FileWrapper(temp)
1236 response = HttpResponse(wrapper, content_type='application/zip')
1237 response['Content-Disposition'] = 'attachment; filename=all.zip'