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"]'
756 seq1,ssbond1=from_pdb(task.myfile1)
757 seq2,ssbond2=from_pdb(task.myfile2)
759 if seq1[-1]=='X' and seq2[0]=='X':
761 elif seq1[-1]!='X' and seq2[0]!='X':
766 for i in range(0,len(seq),40):
767 task.md_seq=task.md_seq+seq[i:i+40]+" "
769 task.md_seed=form.cleaned_data["md_seed"]
771 task.md_nstep=form.cleaned_data["md_nstep"]
772 task.md_total_steps=task.md_nstep
774 if any(c.islower() for c in seq):
783 if is_lazy_user(request.user):
784 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
788 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
789 form = TaskForm_dock(initial=data)
792 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
795 def add_dock_a(request,task_id):
796 task = get_object_or_404(Task, id=task_id)
797 if request.method == 'POST':
798 if '_example' in request.POST:
799 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
800 form = TaskForm_dock_a(initial=data)
802 form = TaskForm_dock_a(request.POST,request.FILES)
804 task.name=form.cleaned_data["name"]
807 basename = str(task.owner)
808 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
809 task.jobdirname = "_".join([basename, suffix])
811 pdbid=form.cleaned_data["pdbid"]
813 task.myfile1=load_pdbid(pdbid,task.jobdirname)
816 task.myfile1=form.cleaned_data["file1"]
818 pdbid2=form.cleaned_data["pdbid2"]
820 task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
823 task.myfile2=form.cleaned_data["file2"]
825 task.md_ntwx=task.remd_nstex
826 task.md_start="pdbstart"
833 seq1,ssbond1=from_pdb(task.myfile1)
834 seq2,ssbond2=from_pdb(task.myfile2)
836 if seq1[-1]=='X' and seq2[0]=='X':
838 elif seq1[-1]!='X' and seq2[0]!='X':
843 for i in range(0,len(seq),40):
844 task.md_seq=task.md_seq+seq[i:i+40]+" "
846 task.md_seed=form.cleaned_data["md_seed"]
848 task.md_nstep=form.cleaned_data["md_nstep"]
849 task.md_total_steps=task.md_nstep
851 task.md_dt=form.cleaned_data["md_dt"]
852 task.md_lang=form.cleaned_data["md_lang"]
853 task.md_tau=form.cleaned_data["md_tau"]
854 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
855 task.min_maxfun=form.cleaned_data["min_maxfun"]
856 task.remd_nrep=form.cleaned_data["remd_nrep"]
857 task.remd_nstex=form.cleaned_data["remd_nstex"]
858 task.md_ntwx=form.cleaned_data["md_ntwx"]
859 task.md_ntwe=form.cleaned_data["md_ntwe"]
861 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
862 task.unres_ff=form.cleaned_data["unres_ff"]
864 if any(c.islower() for c in seq):
873 return redirect('addmlist',task_id=task.id)
876 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
877 form = TaskForm_dock_a(initial=data)
879 p_type='docking - advanced options'
880 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
885 def addmlist(request,task_id):
886 task = get_object_or_404(Task, id=task_id)
887 if request.method == 'POST':
888 form = TaskForm_list(task.remd_nrep,request.POST)
890 task.remd_multi_t=form.cleaned_data["temperatures"]
891 task.remd_multi_m=form.cleaned_data["multiplexing"]
895 if is_lazy_user(request.user):
896 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
900 if task.example == 'casp12':
901 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
902 '["2", "2", "2", "2", "2", "2", "2", "2"]',
904 '["270", "280", "290", "300", "310", "320", "330", "340"]'
906 elif task.unres_ff == 'FF2':
907 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
908 '["1", "1", "1", "1", "1", "1", "1", "1"]',
910 '["270", "280", "290", "300", "310", "320", "330", "345"]'
913 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
914 '["1", "1", "1", "1", "1", "1", "1", "1"]',
916 '["250", "260", "270", "280", "290", "300", "315", "330"]'
919 form = TaskForm_list(task.remd_nrep,initial=data)
920 p_type='replica exchange molecular dynamics - advanced options'
921 return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
924 def details(request,task_id):
925 task = get_object_or_404(Task, id=task_id)
926 return render(request, "details.html",{'task':task})
929 def details1(request,user_id,task_id):
930 task = get_object_or_404(Task, id=task_id)
931 return render(request, "details1.html",{'task':task})
935 def delete(request, task_id):
936 Task.objects.get(id=task_id).delete()
940 def restart(request, task_id):
941 task = get_object_or_404(Task, id=task_id)
945 def add_restart_inp():
946 with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
948 if 'reset_vel=' in line:
949 f2.write('{:79}'.format('restart'+line[7:]))
952 os.remove('file.inp')
953 os.rename('file.inp.tmp','file.inp')
957 if os.path.isfile(task.jobdirname+'/finished'):
958 os.remove(task.jobdirname+'/finished')
961 task.md_total_steps = task.md_total_steps+task.md_nstep
963 if task.type == 'md':
964 os.chdir(task.jobdirname)
966 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
968 elif task.type == 'remd':
969 os.chdir(task.jobdirname)
971 tmp1=json.loads(task.remd_multi_m)
972 nreplicas=sum(map(int, tmp1))
973 with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
975 if 'rec_end=' in line:
976 rec=task.md_total_steps/task.md_ntwx
977 f2.write('nfile_cx=1 rec_start='+str(rec/10)
978 +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
979 elif 'isampl=' in line:
980 if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
983 isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
984 f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
987 os.remove('file_wham.inp')
988 os.rename('file_wham.tmp','file_wham.inp')
989 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
993 def restart1(request, user_id, task_id):
994 task = get_object_or_404(Task, id=task_id)
997 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1000 def refresh_done1(request, task_id):
1001 task = get_object_or_404(Task, id=task_id)
1005 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1008 for line in proc.stdout:
1009 if 'piasek4' in line:
1010 if line.split()[1]=='test_server':
1012 if line.split()[-2]=='Q':
1014 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1016 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1020 def refresh_done(request):
1022 tasks = Task.objects.filter(owner=user).order_by('-created_date')
1023 tasks_count = Task.objects.filter(owner=user).count()
1030 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
1033 for line in proc.stdout:
1034 if 'piasek4' in line:
1035 if line.split()[1]=='test_server':
1037 if line.split()[-2]=='Q':
1039 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
1041 if is_lazy_user(request.user):
1042 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
1044 return render(request, "index.html", {
1046 'variable' : variable,
1048 'tasks_count':tasks_count
1052 def refresh_done0(task):
1053 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
1056 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1058 if task.type=='min' or task.type=='md':
1062 task.etot=line.split()[1]
1064 if 'RMS deviation' in line:
1072 if 'Total wall' in line:
1075 elif task.type=='remd' or task.type=='dock':
1077 text="Acceptance for replica exchanges and number of exchange attempts\n"
1082 text=text+' '.join(line.split()[2:])+"\n"
1083 if j==task.remd_nrep:
1085 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
1087 if 'Total wall' in line:
1090 task.results_text=text
1093 if task.md_pdbref and task.type=='remd' or task.type=='dock':
1095 for i in range(1,6):
1097 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
1100 task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
1102 task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
1104 task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
1106 task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
1108 task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
1109 except EnvironmentError:
1110 print 'file_wham_T*pdb open error'
1111 for i in range(1,6):
1112 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
1115 if 'RMSD of the common residues=' in line:
1116 text=' RMSD='+line.split()[5]
1117 if 'TM-score =' in line:
1118 text=text+' TMscore='+line.split()[2]
1119 if 'GDT-TS-score=' in line:
1120 text=text+' GDT_TS='+line.split()[1]
1123 task.remd_model1=task.remd_model1+text
1125 task.remd_model2=task.remd_model2+text
1127 task.remd_model3=task.remd_model3+text
1129 task.remd_model4=task.remd_model4+text
1131 task.remd_model5=task.remd_model5+text
1133 if task.type=='dock':
1134 for i in range(1,6):
1135 with open(task.jobdirname+'/dockq_'+str(i)+'.out', 'r') as f:
1139 text=' Fnat='+line.split()[1]
1141 text=text+' iRMS='+line.split()[1]
1143 text=text+' LRMS='+line.split()[1]
1145 text=text+' CAPRI'+line.split()[1]
1146 if 'DockQ_CAPRI' in line:
1147 text=text+' DockQ_CAPRI'+line.split()[1]
1148 if 'DockQ ' in line:
1149 text=text+' DockQ'+line.split()[1]
1152 task.remd_model1=task.remd_model1+text
1154 task.remd_model2=task.remd_model2+text
1156 task.remd_model3=task.remd_model3+text
1158 task.remd_model4=task.remd_model4+text
1160 task.remd_model5=task.remd_model5+text
1163 if task.type=='remd' or task.type=='dock':
1164 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
1167 if 'sumprob' in line:
1174 task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[-2]
1176 task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[-2]
1178 task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[-2]
1180 task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[-2]
1182 task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[-2]
1187 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
1188 if (task.type=='min'):
1190 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
1195 last = line.split()[0]
1199 task.running=int(1+int(last)*100.0/task.min_maxmin)
1202 if task.running>100:
1205 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
1210 last = line.split()[0]
1213 task.running=int(1+int(last)*100.0/task.md_nstep)
1214 if task.running>100:
1222 def zip_all_files(request, task_id):
1224 from django.http import HttpResponse
1225 from wsgiref.util import FileWrapper
1226 from django.core.files.temp import NamedTemporaryFile
1228 task = get_object_or_404(Task, id=task_id)
1230 temp=NamedTemporaryFile()
1231 archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
1232 for (dirpath, dirnames, filenames) in os.walk(task.jobdirname):
1233 for file1 in filenames:
1234 archive.write(dirpath+"/"+file1,file1)
1237 wrapper = FileWrapper(temp)
1238 response = HttpResponse(wrapper, content_type='application/zip')
1239 response['Content-Disposition'] = 'attachment; filename=all.zip'