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):
36 file,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
41 pdb_tmp=urllib.urlopen('http://files.rcsb.org/download/'+pdbid+'.pdb')
42 with open(dirname+'/plik.pdb', 'w') as outfile:
44 if line[0:6] == 'SSBOND' and line[15] == chain and line[29] == chain:
46 if line[0:6] == 'ATOM ' and line[21] == chain:
49 file=dirname+'/plik.pdb'
54 def seq_2d_from_pdb(seq_2d,seq):
57 seq_2d=seq_2d.replace('C', '-')
60 for i in range(0,len(seq)):
62 seq_2d_tmp=seq_2d_tmp+'-'
65 seq_2d_tmp=seq_2d_tmp+seq_2d[ii]
68 for i in range(0,len(seq_2d_tmp),40):
69 tmp=tmp+seq_2d_tmp[i:i+40]+" "
72 def seq_2d_add_x(seq_2d,seq,seq_form):
75 seq_2d=seq_2d[:len(seq_form)]
76 seq_2d=seq_2d.replace('C', '-')
77 if seq_form[0] !='X' and seq[0] == 'X':
79 if seq_form[-1] !='X' and seq[-1] == 'X':
81 seq_2d=seq_2d[:len(seq)]
83 for i in range(0,len(seq_2d),40):
84 tmp=tmp+seq_2d[i:i+40]+" "
87 def seq_add_x(sequence):
88 if sequence[0] != 'G' and sequence[0] != 'g' and sequence[0] != 'X':
90 if sequence[-1] != 'G' and sequence[-1] != 'g' and sequence[-1] != 'X':
92 set ='CDSQKIPTFNGHLRWAVEYMXcdsqkiptfnhlrwaveym'
93 sequence = ''.join([c for c in sequence if c in set])
109 if line[0:6] == 'ATOM ' and line[13:15] == 'CA':
110 aa = three_to_one.get(line[17:20])
113 if newchain or i!=ires[-1]:
118 chain_sorted.extend(ch)
120 if line[0:3] == 'TER' and i != '':
121 sequence.append('XX')
124 if line[0:6] == 'SSBOND':
126 b.append(int(line[17:21]))
127 b.append(int(line[31:35]))
130 c.append((line[15:16]))
131 c.append((line[29:30]))
133 if line[0:3] == 'END':
135 if not sequence[-1] == 'XX':
137 while sequence[-1] == 'XX':
139 if sequence[0] != 'G':
140 sequence.insert(0,'X')
141 ssbond=[ [e[0]+1,e[1]+1] for e in ssbond]
142 if sequence[-1] != 'G':
144 seq=''.join(sequence)
146 # ssbond=[ [e[0]-ires[0]+1,e[1]-ires[0]+1] for e in ssbond]
148 for c in chain_sorted:
149 unres_shift[c]=i+chain_start[c]
150 i=i-(chain_end[c]-chain_start[c])-3
151 ssbond=[ [e[0]-unres_shift[c[0]]+1,e[1]-unres_shift[c[1]]+1] for e,c in zip(ssbond,ssbond_ch)]
153 return seq,json.dumps(ssbond)
159 tasks = Task.objects.filter(owner=user).order_by('-created_date')
161 return render(request, "index.html", {
162 'tasks': tasks, 'alldone': 0
167 if request.method == 'POST':
168 form = TaskForm(request.POST)
170 name = form.cleaned_data["name"]
172 task = Task(name=name,owner=user,ready=False)
174 return redirect('add_min',task_id=task.id)
178 def add_min(request,task_id):
179 task = get_object_or_404(Task, id=task_id)
180 if request.method == 'POST':
181 if '_example' in request.POST:
182 data= {'name':task.name,'pdbid':'1BDD'}
183 form = TaskForm_min(initial=data)
185 form = TaskForm_min(request.POST,request.FILES)
187 task.name=form.cleaned_data["name"]
189 pdbid=form.cleaned_data["pdbid"]
191 basename = str(task.owner)
192 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
193 task.jobdirname = "_".join([basename, suffix])
196 task.myfile1=load_pdbid(pdbid,task.jobdirname)
199 task.myfile1=form.cleaned_data["file1"]
201 seq,task.ssbond=from_pdb(task.myfile1)
203 for i in range(0,len(seq),40):
204 task.md_seq=task.md_seq+seq[i:i+40]+" "
209 if is_lazy_user(request.user):
210 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
214 data= {'name':task.name}
215 form = TaskForm_min(initial=data)
216 p_type='minimization'
218 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
221 def add_min_a(request,task_id):
222 task = get_object_or_404(Task, id=task_id)
223 if request.method == 'POST':
224 if '_example' in request.POST:
225 data= {'name':task.name,'pdbid':'1EI0','unres_ff':'opt-wtfsa-2'}
226 form = TaskForm_min_a(initial=data)
228 form = TaskForm_min_a(request.POST,request.FILES)
230 task.name=form.cleaned_data["name"]
232 # task.min_choice=form.cleaned_data["min_choice"]
233 task.min_overlap=form.cleaned_data["min_overlap"]
234 task.min_searchsc=form.cleaned_data["min_searchsc"]
235 task.min_maxmin=form.cleaned_data["min_maxmin"]
236 task.min_maxfun=form.cleaned_data["min_maxfun"]
237 task.min_pdbout=form.cleaned_data["min_pdbout"]
239 basename = str(task.owner)
240 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
241 task.jobdirname = "_".join([basename, suffix])
243 pdbid=form.cleaned_data["pdbid"]
245 task.myfile1=load_pdbid(pdbid,task.jobdirname)
248 task.myfile1=form.cleaned_data["file1"]
250 task.min_unres_pdb=form.cleaned_data["min_unres_pdb"]
251 task.unres_ff=form.cleaned_data["unres_ff"]
252 task.boxx=form.cleaned_data["boxx"]
253 task.boxy=form.cleaned_data["boxy"]
254 task.boxz=form.cleaned_data["boxz"]
256 seq,task.ssbond=from_pdb(task.myfile1)
258 for i in range(0,len(seq),40):
259 task.md_seq=task.md_seq+seq[i:i+40]+" "
264 if is_lazy_user(request.user):
265 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
269 data= {'name':task.name}
270 form = TaskForm_min_a(initial=data)
272 p_type='minimization - advanced options'
273 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
276 def add_md(request,task_id):
277 task = get_object_or_404(Task, id=task_id)
278 if request.method == 'POST':
279 if '_example' in request.POST:
280 data= {'name':task.name,'pdbid':'1IGD','md_start':'pdbstart',
281 'md_pdbref':True,'md_temp':200,'md_seed':-39912345}
282 form = TaskForm_md(initial=data)
284 form = TaskForm_md(request.POST,request.FILES)
286 task.name=form.cleaned_data["name"]
288 task.md_seed=form.cleaned_data["md_seed"]
289 task.md_start=form.cleaned_data["md_start"]
290 task.md_temp=form.cleaned_data["md_temp"]
291 task.md_nstep=form.cleaned_data["md_nstep"]
293 basename = str(task.owner)
294 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
295 task.jobdirname = "_".join([basename, suffix])
297 pdbid=form.cleaned_data["pdbid"]
299 task.myfile1=load_pdbid(pdbid,task.jobdirname)
302 task.myfile1=form.cleaned_data["file1"]
303 task.md_pdbref=form.cleaned_data["md_pdbref"]
306 if task.md_start == "pdbstart" or task.md_pdbref:
307 seq,task.ssbond=from_pdb(task.myfile1)
309 seq=seq_add_x(form.cleaned_data["md_seq"])
311 for i in range(0,len(seq),40):
312 task.md_seq=task.md_seq+seq[i:i+40]+" "
314 if task.md_start != "pdbstart":
317 if any(c.islower() for c in seq):
324 if is_lazy_user(request.user):
325 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
329 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
330 form = TaskForm_md(initial=data)
332 p_type='molecular dynamics'
333 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
336 def add_md_a(request,task_id):
337 task = get_object_or_404(Task, id=task_id)
338 if request.method == 'POST':
339 if '_example' in request.POST:
340 data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf',
341 'md_pdbref':True,'md_mdpdb':True,'md_seed':-39912345}
342 form = TaskForm_md_a(initial=data)
344 form = TaskForm_md_a(request.POST,request.FILES)
346 task.name=form.cleaned_data["name"]
349 basename = str(task.owner)
350 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
351 task.jobdirname = "_".join([basename, suffix])
353 pdbid=form.cleaned_data["pdbid"]
355 task.myfile1=load_pdbid(pdbid,task.jobdirname)
358 task.myfile1=form.cleaned_data["file1"]
359 task.md_start=form.cleaned_data["md_start"]
360 task.md_pdbref=form.cleaned_data["md_pdbref"]
363 if task.md_start == "pdbstart" or task.md_pdbref:
364 seq,task.ssbond=from_pdb(task.myfile1)
365 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
367 seq=seq_add_x(form.cleaned_data["md_seq"])
368 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
370 for i in range(0,len(seq),40):
371 task.md_seq=task.md_seq+seq[i:i+40]+" "
373 if task.md_start != "pdbstart":
376 task.md_seed=form.cleaned_data["md_seed"]
378 task.md_temp=form.cleaned_data["md_temp"]
379 task.md_nstep=form.cleaned_data["md_nstep"]
380 task.md_ntwe=form.cleaned_data["md_ntwe"]
381 task.md_ntwx=form.cleaned_data["md_ntwx"]
382 task.md_dt=form.cleaned_data["md_dt"]
383 task.md_lang=form.cleaned_data["md_lang"]
384 task.md_tau=form.cleaned_data["md_tau"]
385 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
386 task.md_mdpdb=form.cleaned_data["md_mdpdb"]
387 task.unres_ff=form.cleaned_data["unres_ff"]
388 task.md_respa=form.cleaned_data["md_respa"]
389 if any(c.islower() for c in seq):
392 task.boxx=form.cleaned_data["boxx"]
393 task.boxy=form.cleaned_data["boxy"]
394 task.boxz=form.cleaned_data["boxz"]
400 if is_lazy_user(request.user):
401 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
405 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
406 form = TaskForm_md_a(initial=data)
408 p_type='molecular dynamics - advanced options'
409 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
412 def add_remd(request,task_id):
413 task = get_object_or_404(Task, id=task_id)
414 if request.method == 'POST':
415 if '_example' in request.POST:
416 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
417 form = TaskForm_remd(initial=data)
419 form = TaskForm_remd(request.POST,request.FILES)
421 task.name=form.cleaned_data["name"]
423 task.md_start=form.cleaned_data["md_start"]
425 basename = str(task.owner)
426 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
427 task.jobdirname = "_".join([basename, suffix])
429 pdbid=form.cleaned_data["pdbid"]
431 task.myfile1=load_pdbid(pdbid,task.jobdirname)
434 task.myfile1=form.cleaned_data["file1"]
435 task.md_pdbref=form.cleaned_data["md_pdbref"]
436 task.md_ntwx=task.remd_nstex
439 if task.md_start == "pdbstart" or task.md_pdbref:
440 seq,task.ssbond=from_pdb(task.myfile1)
442 seq=seq_add_x(form.cleaned_data["md_seq"])
443 for i in range(0,len(seq),40):
444 task.md_seq=task.md_seq+seq[i:i+40]+" "
446 if task.md_start != "pdbstart":
449 task.md_seed=form.cleaned_data["md_seed"]
451 task.md_nstep=form.cleaned_data["md_nstep"]
453 if any(c.islower() for c in seq):
462 if is_lazy_user(request.user):
463 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
467 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
468 form = TaskForm_remd(initial=data)
470 p_type='replica exchange molecular dynamics'
471 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
474 def add_remd_a(request,task_id):
475 from django.core.files.uploadedfile import UploadedFile
476 task = get_object_or_404(Task, id=task_id)
477 if request.method == 'POST':
478 if '_example' in request.POST:
479 data= {'name':task.name,'pdbid':'5G3Q:B','md_pdbref':True,
480 'md_nstep':2000000,'md_lang':'berendsen','unres_ff':'FF2','md_seed':-39912345,
481 'remd_cluter_temp':290,'md_2d':'--EEEEEEE------EEEEEE------EEEEEE------HHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHH---'}
482 form = TaskForm_remd_a(initial=data)
483 task.example='casp12'
485 elif '_example_saxs' in request.POST:
486 data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True,
487 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
488 'remd_cluter_temp':270,
489 'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
527 form = TaskForm_remd_a(initial=data)
528 elif '_example_saxs1' in request.POST:
529 data= {'name':task.name,'pdbid':'2KMS','md_pdbref':True,'md_start':'pdbstart',
530 'md_2d':'----EEEEEE-EEEEE-------EEEEEEEEE--EEEEEE-EEEE---EEEEEEEEE-----EEEEEEE-EEE-HHHHH-EEEE-EEEEEEEEE----EEEEEE---EEE-----',
531 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
532 'remd_cluter_temp':280, 'min_maxfun':50,
533 'scal_rad':5.0,'wsaxs':1000.0,'saxs_data':
534 """0.7100E-00 0.2036E-03
535 0.1420E+01 0.4221E-03
536 0.2130E+01 0.6548E-03
537 0.2840E+01 0.9001E-03
538 0.3550E+01 0.1156E-02
539 0.4260E+01 0.1421E-02
540 0.4970E+01 0.1692E-02
541 0.5680E+01 0.1965E-02
542 0.6390E+01 0.2239E-02
543 0.7100E+01 0.2509E-02
544 0.7810E+01 0.2772E-02
545 0.8520E+01 0.3025E-02
546 0.9230E+01 0.3265E-02
547 0.9940E+01 0.3489E-02
548 0.1065E+02 0.3694E-02
549 0.1136E+02 0.3878E-02
550 0.1207E+02 0.4039E-02
551 0.1278E+02 0.4177E-02
552 0.1349E+02 0.4289E-02
553 0.1420E+02 0.4377E-02
554 0.1491E+02 0.4439E-02
555 0.1562E+02 0.4478E-02
556 0.1633E+02 0.4493E-02
557 0.1704E+02 0.4487E-02
558 0.1775E+02 0.4461E-02
559 0.1846E+02 0.4418E-02
560 0.1917E+02 0.4361E-02
561 0.1988E+02 0.4291E-02
562 0.2059E+02 0.4211E-02
563 0.2130E+02 0.4125E-02
564 0.2201E+02 0.4034E-02
565 0.2272E+02 0.3942E-02
566 0.2343E+02 0.3850E-02
567 0.2414E+02 0.3761E-02
568 0.2485E+02 0.3677E-02
569 0.2556E+02 0.3598E-02
570 0.2627E+02 0.3526E-02
571 0.2698E+02 0.3462E-02
572 0.2769E+02 0.3405E-02
573 0.2840E+02 0.3356E-02
574 0.2911E+02 0.3315E-02
575 0.2982E+02 0.3280E-02
576 0.3053E+02 0.3251E-02
577 0.3124E+02 0.3226E-02
578 0.3195E+02 0.3205E-02
579 0.3266E+02 0.3186E-02
580 0.3337E+02 0.3167E-02
581 0.3408E+02 0.3147E-02
582 0.3479E+02 0.3125E-02
583 0.3550E+02 0.3099E-02
584 0.3621E+02 0.3068E-02
585 0.3692E+02 0.3031E-02
586 0.3763E+02 0.2987E-02
587 0.3834E+02 0.2937E-02
588 0.3905E+02 0.2878E-02
589 0.3976E+02 0.2812E-02
590 0.4047E+02 0.2739E-02
591 0.4118E+02 0.2658E-02
592 0.4189E+02 0.2571E-02
593 0.4260E+02 0.2478E-02
594 0.4331E+02 0.2381E-02
595 0.4402E+02 0.2279E-02
596 0.4473E+02 0.2174E-02
597 0.4544E+02 0.2068E-02
598 0.4615E+02 0.1960E-02
599 0.4686E+02 0.1853E-02
600 0.4757E+02 0.1748E-02
601 0.4828E+02 0.1644E-02
602 0.4899E+02 0.1544E-02
603 0.4970E+02 0.1447E-02
604 0.5041E+02 0.1355E-02
605 0.5112E+02 0.1267E-02
606 0.5183E+02 0.1184E-02
607 0.5254E+02 0.1106E-02
608 0.5325E+02 0.1033E-02
609 0.5396E+02 0.9646E-03
610 0.5467E+02 0.9008E-03
611 0.5538E+02 0.8411E-03
612 0.5609E+02 0.7852E-03
613 0.5680E+02 0.7327E-03
614 0.5751E+02 0.6831E-03
615 0.5822E+02 0.6360E-03
616 0.5893E+02 0.5909E-03
617 0.5964E+02 0.5475E-03
618 0.6035E+02 0.5055E-03
619 0.6106E+02 0.4646E-03
620 0.6177E+02 0.4245E-03
621 0.6248E+02 0.3853E-03
622 0.6319E+02 0.3467E-03
623 0.6390E+02 0.3089E-03
624 0.6461E+02 0.2719E-03
625 0.6532E+02 0.2357E-03
626 0.6603E+02 0.2007E-03
627 0.6674E+02 0.1669E-03
628 0.6745E+02 0.1345E-03
629 0.6816E+02 0.1038E-03
630 0.6887E+02 0.7482E-04
631 0.6958E+02 0.4782E-04
632 0.7029E+02 0.2286E-04"""}
633 form = TaskForm_remd_a(initial=data)
635 form = TaskForm_remd_a(request.POST,request.FILES)
637 task.name=form.cleaned_data["name"]
640 basename = str(task.owner)
641 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
642 task.jobdirname = "_".join([basename, suffix])
644 pdbid=form.cleaned_data["pdbid"]
646 task.myfile1=load_pdbid(pdbid,task.jobdirname)
649 task.myfile1=form.cleaned_data["file1"]
650 task.md_start=form.cleaned_data["md_start"]
651 task.md_pdbref=form.cleaned_data["md_pdbref"]
654 if task.md_start == "pdbstart" or task.md_pdbref:
655 seq,task.ssbond=from_pdb(task.myfile1)
656 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
658 seq=seq_add_x(form.cleaned_data["md_seq"])
659 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
661 for i in range(0,len(seq),40):
662 task.md_seq=task.md_seq+seq[i:i+40]+" "
664 if task.md_start != "pdbstart":
667 task.md_seed=form.cleaned_data["md_seed"]
668 task.md_nstep=form.cleaned_data["md_nstep"]
669 task.md_dt=form.cleaned_data["md_dt"]
670 task.md_lang=form.cleaned_data["md_lang"]
671 task.md_tau=form.cleaned_data["md_tau"]
672 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
673 task.min_maxfun=form.cleaned_data["min_maxfun"]
674 task.remd_nrep=form.cleaned_data["remd_nrep"]
675 task.remd_nstex=form.cleaned_data["remd_nstex"]
676 task.md_ntwx=form.cleaned_data["md_ntwx"]
677 task.md_ntwe=form.cleaned_data["md_ntwe"]
678 task.md_respa=form.cleaned_data["md_respa"]
679 if any(c.islower() for c in seq):
683 # task.remd_traj1file=form.cleaned_data["remd_traj1file"]
684 # task.remd_rest1file=form.cleaned_data["remd_rest1file"]
686 task.boxx=form.cleaned_data["boxx"]
687 task.boxy=form.cleaned_data["boxy"]
688 task.boxz=form.cleaned_data["boxz"]
690 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
691 task.unres_ff=form.cleaned_data["unres_ff"]
693 task.scal_rad = form.cleaned_data["scal_rad"]
694 task.saxs_data = form.cleaned_data["saxs_data"]
695 task.wsaxs = form.cleaned_data["wsaxs"]
698 return redirect('addmlist',task_id=task.id)
700 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
701 form = TaskForm_remd_a(initial=data)
703 p_type='replica exchange molecular dynamics - advanced options'
704 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
707 def addmlist(request,task_id):
708 task = get_object_or_404(Task, id=task_id)
709 if request.method == 'POST':
710 form = TaskForm_list(task.remd_nrep,request.POST)
712 task.remd_multi_t=form.cleaned_data["temperatures"]
713 task.remd_multi_m=form.cleaned_data["multiplexing"]
717 if is_lazy_user(request.user):
718 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
722 if task.example == 'casp12':
723 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
724 '["2", "2", "2", "2", "2", "2", "2", "2"]',
726 '["270", "280", "290", "300", "310", "320", "330", "340"]'
728 elif task.unres_ff == 'FF2':
729 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
730 '["1", "1", "1", "1", "1", "1", "1", "1"]',
732 '["270", "280", "290", "300", "310", "320", "330", "345"]'
735 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
736 '["1", "1", "1", "1", "1", "1", "1", "1"]',
738 '["250", "260", "270", "280", "290", "300", "315", "330"]'
741 form = TaskForm_list(task.remd_nrep,initial=data)
742 p_type='replica exchange molecular dynamics - advanced options'
743 return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
746 def details(request,task_id):
747 task = get_object_or_404(Task, id=task_id)
748 return render(request, "details.html",{'task':task})
751 def details1(request,user_id,task_id):
752 task = get_object_or_404(Task, id=task_id)
753 return render(request, "details1.html",{'task':task})
757 def delete(request, task_id):
758 Task.objects.get(id=task_id).delete()
761 def refresh_done1(request, task_id):
762 task = get_object_or_404(Task, id=task_id)
766 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
769 for line in proc.stdout:
770 if 'piasek4' in line:
771 if line.split()[1]=='test_server':
773 if line.split()[-2]=='Q':
775 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
777 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
781 def refresh_done(request):
783 tasks = Task.objects.filter(owner=user).order_by('-created_date')
790 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
793 for line in proc.stdout:
794 if 'piasek4' in line:
795 if line.split()[1]=='test_server':
797 if line.split()[-2]=='Q':
799 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
801 if is_lazy_user(request.user):
802 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
804 return render(request, "index.html", {
806 'variable' : variable,
811 def refresh_done0(task):
812 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
815 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
817 if task.type=='min' or task.type=='md':
821 task.etot=line.split()[1]
823 if 'RMS deviation' in line:
831 if 'Total wall' in line:
834 elif task.type=='remd':
836 text="Acceptance for replica exchanges and number of exchange attempts\n"
841 text=text+' '.join(line.split()[2:])+"\n"
842 if j==task.remd_nrep:
844 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
846 if 'Total wall' in line:
849 task.results_text=text
852 if task.md_pdbref and task.type=='remd':
856 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
859 task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
861 task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
863 task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
865 task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
867 task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
868 except EnvironmentError:
869 print 'file_wham_T*pdb open error'
871 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
874 if 'RMSD of the common residues=' in line:
875 text=' RMSD='+line.split()[5]
876 if 'TM-score =' in line:
877 text=text+' TMscore='+line.split()[2]
878 if 'GDT-TS-score=' in line:
879 text=text+' GDT_TS='+line.split()[1]
882 task.remd_model1=task.remd_model1+text
884 task.remd_model2=task.remd_model2+text
886 task.remd_model3=task.remd_model3+text
888 task.remd_model4=task.remd_model4+text
890 task.remd_model5=task.remd_model5+text
894 if task.type=='remd':
895 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
898 if 'sumprob' in line:
905 task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
907 task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
909 task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
911 task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
913 task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
918 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
919 if (task.type=='min'):
921 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
926 last = line.split()[0]
930 task.running=int(1+int(last)*100.0/task.min_maxmin)
936 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
941 last = line.split()[0]
944 task.running=int(1+int(last)*100.0/task.md_nstep)