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"
834 seq1,ssbond1=from_pdb(task.myfile1)
835 seq2,ssbond2=from_pdb(task.myfile2)
837 if seq1[-1]=='X' and seq2[0]=='X':
839 elif seq1[-1]!='X' and seq2[0]!='X':
844 for i in range(0,len(seq),40):
845 task.md_seq=task.md_seq+seq[i:i+40]+" "
847 task.md_seed=form.cleaned_data["md_seed"]
849 task.md_nstep=form.cleaned_data["md_nstep"]
850 task.md_total_steps=task.md_nstep
852 task.md_dt=form.cleaned_data["md_dt"]
853 task.md_lang=form.cleaned_data["md_lang"]
854 task.md_tau=form.cleaned_data["md_tau"]
855 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
856 task.min_maxfun=form.cleaned_data["min_maxfun"]
857 task.remd_nrep=form.cleaned_data["remd_nrep"]
858 task.remd_nstex=form.cleaned_data["remd_nstex"]
859 task.md_ntwx=form.cleaned_data["md_ntwx"]
860 task.md_ntwe=form.cleaned_data["md_ntwe"]
862 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
863 task.unres_ff=form.cleaned_data["unres_ff"]
865 if any(c.islower() for c in seq):
870 return redirect('addmlist',task_id=task.id)
873 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
874 form = TaskForm_dock_a(initial=data)
876 p_type='docking - advanced options'
877 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
882 def addmlist(request,task_id):
883 task = get_object_or_404(Task, id=task_id)
884 if request.method == 'POST':
885 form = TaskForm_list(task.remd_nrep,request.POST)
887 task.remd_multi_t=form.cleaned_data["temperatures"]
888 task.remd_multi_m=form.cleaned_data["multiplexing"]
892 if is_lazy_user(request.user):
893 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
897 if task.example == 'casp12':
898 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
899 '["2", "2", "2", "2", "2", "2", "2", "2"]',
901 '["270", "280", "290", "300", "310", "320", "330", "340"]'
903 elif task.unres_ff == 'FF2':
904 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
905 '["1", "1", "1", "1", "1", "1", "1", "1"]',
907 '["270", "280", "290", "300", "310", "320", "330", "345"]'
910 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
911 '["1", "1", "1", "1", "1", "1", "1", "1"]',
913 '["250", "260", "270", "280", "290", "300", "315", "330"]'
916 form = TaskForm_list(task.remd_nrep,initial=data)
917 p_type='replica exchange molecular dynamics - advanced options'
918 return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
921 def details(request,task_id):
922 task = get_object_or_404(Task, id=task_id)
923 return render(request, "details.html",{'task':task})
926 def details1(request,user_id,task_id):
927 task = get_object_or_404(Task, id=task_id)
928 return render(request, "details1.html",{'task':task})
932 def delete(request, task_id):
933 Task.objects.get(id=task_id).delete()
937 def restart(request, task_id):
938 task = get_object_or_404(Task, id=task_id)
942 def add_restart_inp():
943 with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
945 if 'reset_vel=' in line:
946 f2.write('{:79}'.format('restart'+line[7:]))
949 os.remove('file.inp')
950 os.rename('file.inp.tmp','file.inp')
954 if os.path.isfile(task.jobdirname+'/finished'):
955 os.remove(task.jobdirname+'/finished')
958 task.md_total_steps = task.md_total_steps+task.md_nstep
960 if task.type == 'md':
961 os.chdir(task.jobdirname)
963 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
965 elif task.type == 'remd':
966 os.chdir(task.jobdirname)
968 tmp1=json.loads(task.remd_multi_m)
969 nreplicas=sum(map(int, tmp1))
970 with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
972 if 'rec_end=' in line:
973 rec=task.md_total_steps/task.md_ntwx
974 f2.write('nfile_cx=1 rec_start='+str(rec/10)
975 +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
976 elif 'isampl=' in line:
977 if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
980 isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
981 f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
984 os.remove('file_wham.inp')
985 os.rename('file_wham.tmp','file_wham.inp')
986 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
990 def restart1(request, user_id, task_id):
991 task = get_object_or_404(Task, id=task_id)
994 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
997 def refresh_done1(request, task_id):
998 task = get_object_or_404(Task, id=task_id)
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 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1017 def refresh_done(request):
1019 tasks = Task.objects.filter(owner=user).order_by('-created_date')
1020 tasks_count = Task.objects.filter(owner=user).count()
1027 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1030 for line in proc.stdout:
1031 if 'piasek4' in line:
1032 if line.split()[1]=='test_server':
1034 if line.split()[-2]=='Q':
1036 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1038 if is_lazy_user(request.user):
1039 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1041 return render(request, "index.html", {
1043 'variable' : variable,
1045 'tasks_count':tasks_count
1049 def refresh_done0(task):
1050 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
1053 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1055 if task.type=='min' or task.type=='md':
1059 task.etot=line.split()[1]
1061 if 'RMS deviation' in line:
1069 if 'Total wall' in line:
1072 elif task.type=='remd' or task.type=='dock':
1074 text="Acceptance for replica exchanges and number of exchange attempts\n"
1079 text=text+' '.join(line.split()[2:])+"\n"
1080 if j==task.remd_nrep:
1082 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
1084 if 'Total wall' in line:
1087 task.results_text=text
1090 if task.md_pdbref and task.type=='remd' or task.type=='dock':
1092 for i in range(1,6):
1094 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
1097 task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
1099 task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
1101 task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
1103 task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
1105 task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
1106 except EnvironmentError:
1107 print 'file_wham_T*pdb open error'
1108 for i in range(1,6):
1109 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1112 if 'RMSD of the common residues=' in line:
1113 text=' RMSD='+line.split()[5]
1114 if 'TM-score =' in line:
1115 text=text+' TMscore='+line.split()[2]
1116 if 'GDT-TS-score=' in line:
1117 text=text+' GDT_TS='+line.split()[1]
1120 task.remd_model1=task.remd_model1+text
1122 task.remd_model2=task.remd_model2+text
1124 task.remd_model3=task.remd_model3+text
1126 task.remd_model4=task.remd_model4+text
1128 task.remd_model5=task.remd_model5+text
1130 if task.type=='dock':
1131 for i in range(1,6):
1132 with open(task.jobdirname+'/dockq_'+str(i)+'.out', 'r') as f:
1136 text=' Fnat='+line.split()[1]
1138 text=text+' iRMS='+line.split()[1]
1140 text=text+' LRMS='+line.split()[1]
1141 if 'CAPRI' in line and not 'DockQ_CAPRI' in line:
1142 text=text+' CAPRI='+line.split()[1]
1143 if 'DockQ_CAPRI' in line:
1144 text=text+' DockQ_CAPRI= '+line.split()[1]
1145 if 'DockQ ' in line:
1146 text=text+' DockQ='+line.split()[1]
1149 task.remd_model1=task.remd_model1+text
1151 task.remd_model2=task.remd_model2+text
1153 task.remd_model3=task.remd_model3+text
1155 task.remd_model4=task.remd_model4+text
1157 task.remd_model5=task.remd_model5+text
1160 if task.type=='remd' or task.type=='dock':
1161 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1164 if 'sumprob' in line:
1171 task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[-2]
1173 task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[-2]
1175 task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[-2]
1177 task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[-2]
1179 task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[-2]
1184 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1185 if (task.type=='min'):
1187 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1192 last = line.split()[0]
1196 task.running=int(1+int(last)*100.0/task.min_maxmin)
1199 if task.running>100:
1202 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1207 last = line.split()[0]
1210 task.running=int(1+int(last)*100.0/task.md_nstep)
1211 if task.running>100:
1219 def zip_all_files(request, task_id):
1221 from django.http import HttpResponse
1222 from wsgiref.util import FileWrapper
1223 from django.core.files.temp import NamedTemporaryFile
1225 task = get_object_or_404(Task, id=task_id)
1227 temp=NamedTemporaryFile()
1228 archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
1229 for (dirpath, dirnames, filenames) in os.walk(task.jobdirname):
1230 for file1 in filenames:
1231 archive.write(dirpath+"/"+file1,file1)
1234 wrapper = FileWrapper(temp)
1235 response = HttpResponse(wrapper, content_type='application/zip')
1236 response['Content-Disposition'] = 'attachment; filename=all.zip'