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":
320 if is_lazy_user(request.user):
321 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
325 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
326 form = TaskForm_md(initial=data)
328 p_type='molecular dynamics'
329 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
332 def add_md_a(request,task_id):
333 task = get_object_or_404(Task, id=task_id)
334 if request.method == 'POST':
335 if '_example' in request.POST:
336 data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf',
337 'md_pdbref':True,'md_mdpdb':True,'md_seed':-39912345}
338 form = TaskForm_md_a(initial=data)
340 form = TaskForm_md_a(request.POST,request.FILES)
342 task.name=form.cleaned_data["name"]
345 basename = str(task.owner)
346 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
347 task.jobdirname = "_".join([basename, suffix])
349 pdbid=form.cleaned_data["pdbid"]
351 task.myfile1=load_pdbid(pdbid,task.jobdirname)
354 task.myfile1=form.cleaned_data["file1"]
355 task.md_start=form.cleaned_data["md_start"]
356 task.md_pdbref=form.cleaned_data["md_pdbref"]
359 if task.md_start == "pdbstart" or task.md_pdbref:
360 seq,task.ssbond=from_pdb(task.myfile1)
361 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
363 seq=seq_add_x(form.cleaned_data["md_seq"])
364 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
366 for i in range(0,len(seq),40):
367 task.md_seq=task.md_seq+seq[i:i+40]+" "
369 if task.md_start != "pdbstart":
372 task.md_seed=form.cleaned_data["md_seed"]
374 task.md_temp=form.cleaned_data["md_temp"]
375 task.md_nstep=form.cleaned_data["md_nstep"]
376 task.md_ntwe=form.cleaned_data["md_ntwe"]
377 task.md_ntwx=form.cleaned_data["md_ntwx"]
378 task.md_dt=form.cleaned_data["md_dt"]
379 task.md_lang=form.cleaned_data["md_lang"]
380 task.md_tau=form.cleaned_data["md_tau"]
381 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
382 task.md_mdpdb=form.cleaned_data["md_mdpdb"]
383 task.unres_ff=form.cleaned_data["unres_ff"]
384 task.md_respa=form.cleaned_data["md_respa"]
385 task.boxx=form.cleaned_data["boxx"]
386 task.boxy=form.cleaned_data["boxy"]
387 task.boxz=form.cleaned_data["boxz"]
393 if is_lazy_user(request.user):
394 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
398 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
399 form = TaskForm_md_a(initial=data)
401 p_type='molecular dynamics - advanced options'
402 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
405 def add_remd(request,task_id):
406 task = get_object_or_404(Task, id=task_id)
407 if request.method == 'POST':
408 if '_example' in request.POST:
409 data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
410 form = TaskForm_remd(initial=data)
412 form = TaskForm_remd(request.POST,request.FILES)
414 task.name=form.cleaned_data["name"]
416 task.md_start=form.cleaned_data["md_start"]
418 basename = str(task.owner)
419 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
420 task.jobdirname = "_".join([basename, suffix])
422 pdbid=form.cleaned_data["pdbid"]
424 task.myfile1=load_pdbid(pdbid,task.jobdirname)
427 task.myfile1=form.cleaned_data["file1"]
428 task.md_pdbref=form.cleaned_data["md_pdbref"]
429 task.md_ntwx=task.remd_nstex
432 if task.md_start == "pdbstart" or task.md_pdbref:
433 seq,task.ssbond=from_pdb(task.myfile1)
435 seq=seq_add_x(form.cleaned_data["md_seq"])
436 for i in range(0,len(seq),40):
437 task.md_seq=task.md_seq+seq[i:i+40]+" "
439 if task.md_start != "pdbstart":
442 task.md_seed=form.cleaned_data["md_seed"]
444 task.md_nstep=form.cleaned_data["md_nstep"]
451 if is_lazy_user(request.user):
452 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
456 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
457 form = TaskForm_remd(initial=data)
459 p_type='replica exchange molecular dynamics'
460 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
463 def add_remd_a(request,task_id):
464 from django.core.files.uploadedfile import UploadedFile
465 task = get_object_or_404(Task, id=task_id)
466 if request.method == 'POST':
467 if '_example' in request.POST:
468 data= {'name':task.name,'pdbid':'5G3Q:B','md_pdbref':True,
469 'md_nstep':2000000,'md_lang':'berendsen','unres_ff':'FF2','md_seed':-39912345,
470 'remd_cluter_temp':290,'md_2d':'--EEEEEEE------EEEEEE------EEEEEE------HHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHH---'}
471 form = TaskForm_remd_a(initial=data)
472 task.example='casp12'
474 elif '_example_saxs' in request.POST:
475 data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True,
476 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
477 'remd_cluter_temp':270,
478 'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
516 form = TaskForm_remd_a(initial=data)
517 elif '_example_saxs1' in request.POST:
518 data= {'name':task.name,'pdbid':'2KMS','md_pdbref':True,'md_start':'pdbstart',
519 'md_2d':'----EEEEEE-EEEEE-------EEEEEEEEE--EEEEEE-EEEE---EEEEEEEEE-----EEEEEEE-EEE-HHHHH-EEEE-EEEEEEEEE----EEEEEE---EEE-----',
520 'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
521 'remd_cluter_temp':280,
522 'scal_rad':5.0,'wsaxs':1000.0,'saxs_data':
523 """0.7100E-00 0.2036E-03
524 0.1420E+01 0.4221E-03
525 0.2130E+01 0.6548E-03
526 0.2840E+01 0.9001E-03
527 0.3550E+01 0.1156E-02
528 0.4260E+01 0.1421E-02
529 0.4970E+01 0.1692E-02
530 0.5680E+01 0.1965E-02
531 0.6390E+01 0.2239E-02
532 0.7100E+01 0.2509E-02
533 0.7810E+01 0.2772E-02
534 0.8520E+01 0.3025E-02
535 0.9230E+01 0.3265E-02
536 0.9940E+01 0.3489E-02
537 0.1065E+02 0.3694E-02
538 0.1136E+02 0.3878E-02
539 0.1207E+02 0.4039E-02
540 0.1278E+02 0.4177E-02
541 0.1349E+02 0.4289E-02
542 0.1420E+02 0.4377E-02
543 0.1491E+02 0.4439E-02
544 0.1562E+02 0.4478E-02
545 0.1633E+02 0.4493E-02
546 0.1704E+02 0.4487E-02
547 0.1775E+02 0.4461E-02
548 0.1846E+02 0.4418E-02
549 0.1917E+02 0.4361E-02
550 0.1988E+02 0.4291E-02
551 0.2059E+02 0.4211E-02
552 0.2130E+02 0.4125E-02
553 0.2201E+02 0.4034E-02
554 0.2272E+02 0.3942E-02
555 0.2343E+02 0.3850E-02
556 0.2414E+02 0.3761E-02
557 0.2485E+02 0.3677E-02
558 0.2556E+02 0.3598E-02
559 0.2627E+02 0.3526E-02
560 0.2698E+02 0.3462E-02
561 0.2769E+02 0.3405E-02
562 0.2840E+02 0.3356E-02
563 0.2911E+02 0.3315E-02
564 0.2982E+02 0.3280E-02
565 0.3053E+02 0.3251E-02
566 0.3124E+02 0.3226E-02
567 0.3195E+02 0.3205E-02
568 0.3266E+02 0.3186E-02
569 0.3337E+02 0.3167E-02
570 0.3408E+02 0.3147E-02
571 0.3479E+02 0.3125E-02
572 0.3550E+02 0.3099E-02
573 0.3621E+02 0.3068E-02
574 0.3692E+02 0.3031E-02
575 0.3763E+02 0.2987E-02
576 0.3834E+02 0.2937E-02
577 0.3905E+02 0.2878E-02
578 0.3976E+02 0.2812E-02
579 0.4047E+02 0.2739E-02
580 0.4118E+02 0.2658E-02
581 0.4189E+02 0.2571E-02
582 0.4260E+02 0.2478E-02
583 0.4331E+02 0.2381E-02
584 0.4402E+02 0.2279E-02
585 0.4473E+02 0.2174E-02
586 0.4544E+02 0.2068E-02
587 0.4615E+02 0.1960E-02
588 0.4686E+02 0.1853E-02
589 0.4757E+02 0.1748E-02
590 0.4828E+02 0.1644E-02
591 0.4899E+02 0.1544E-02
592 0.4970E+02 0.1447E-02
593 0.5041E+02 0.1355E-02
594 0.5112E+02 0.1267E-02
595 0.5183E+02 0.1184E-02
596 0.5254E+02 0.1106E-02
597 0.5325E+02 0.1033E-02
598 0.5396E+02 0.9646E-03
599 0.5467E+02 0.9008E-03
600 0.5538E+02 0.8411E-03
601 0.5609E+02 0.7852E-03
602 0.5680E+02 0.7327E-03
603 0.5751E+02 0.6831E-03
604 0.5822E+02 0.6360E-03
605 0.5893E+02 0.5909E-03
606 0.5964E+02 0.5475E-03
607 0.6035E+02 0.5055E-03
608 0.6106E+02 0.4646E-03
609 0.6177E+02 0.4245E-03
610 0.6248E+02 0.3853E-03
611 0.6319E+02 0.3467E-03
612 0.6390E+02 0.3089E-03
613 0.6461E+02 0.2719E-03
614 0.6532E+02 0.2357E-03
615 0.6603E+02 0.2007E-03
616 0.6674E+02 0.1669E-03
617 0.6745E+02 0.1345E-03
618 0.6816E+02 0.1038E-03
619 0.6887E+02 0.7482E-04
620 0.6958E+02 0.4782E-04
621 0.7029E+02 0.2286E-04"""}
622 form = TaskForm_remd_a(initial=data)
624 form = TaskForm_remd_a(request.POST,request.FILES)
626 task.name=form.cleaned_data["name"]
629 basename = str(task.owner)
630 suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
631 task.jobdirname = "_".join([basename, suffix])
633 pdbid=form.cleaned_data["pdbid"]
635 task.myfile1=load_pdbid(pdbid,task.jobdirname)
638 task.myfile1=form.cleaned_data["file1"]
639 task.md_start=form.cleaned_data["md_start"]
640 task.md_pdbref=form.cleaned_data["md_pdbref"]
643 if task.md_start == "pdbstart" or task.md_pdbref:
644 seq,task.ssbond=from_pdb(task.myfile1)
645 task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
647 seq=seq_add_x(form.cleaned_data["md_seq"])
648 task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
650 for i in range(0,len(seq),40):
651 task.md_seq=task.md_seq+seq[i:i+40]+" "
653 if task.md_start != "pdbstart":
656 task.md_seed=form.cleaned_data["md_seed"]
657 task.md_nstep=form.cleaned_data["md_nstep"]
658 task.md_dt=form.cleaned_data["md_dt"]
659 task.md_lang=form.cleaned_data["md_lang"]
660 task.md_tau=form.cleaned_data["md_tau"]
661 task.md_scal_fric=form.cleaned_data["md_scal_fric"]
662 task.min_maxfun=form.cleaned_data["min_maxfun"]
663 task.remd_nrep=form.cleaned_data["remd_nrep"]
664 task.remd_nstex=form.cleaned_data["remd_nstex"]
665 task.md_ntwx=form.cleaned_data["md_ntwx"]
666 task.md_ntwe=form.cleaned_data["md_ntwe"]
667 task.md_respa=form.cleaned_data["md_respa"]
668 # task.remd_traj1file=form.cleaned_data["remd_traj1file"]
669 # task.remd_rest1file=form.cleaned_data["remd_rest1file"]
671 task.boxx=form.cleaned_data["boxx"]
672 task.boxy=form.cleaned_data["boxy"]
673 task.boxz=form.cleaned_data["boxz"]
675 task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
676 task.unres_ff=form.cleaned_data["unres_ff"]
678 task.scal_rad = form.cleaned_data["scal_rad"]
679 task.saxs_data = form.cleaned_data["saxs_data"]
680 task.wsaxs = form.cleaned_data["wsaxs"]
683 return redirect('addmlist',task_id=task.id)
685 data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
686 form = TaskForm_remd_a(initial=data)
688 p_type='replica exchange molecular dynamics - advanced options'
689 return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
692 def addmlist(request,task_id):
693 task = get_object_or_404(Task, id=task_id)
694 if request.method == 'POST':
695 form = TaskForm_list(task.remd_nrep,request.POST)
697 task.remd_multi_t=form.cleaned_data["temperatures"]
698 task.remd_multi_m=form.cleaned_data["multiplexing"]
702 if is_lazy_user(request.user):
703 return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
707 if task.example == 'casp12':
708 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
709 '["2", "2", "2", "2", "2", "2", "2", "2"]',
711 '["270", "280", "290", "300", "310", "320", "330", "340"]'
713 elif task.unres_ff == 'FF2':
714 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
715 '["1", "1", "1", "1", "1", "1", "1", "1"]',
717 '["270", "280", "290", "300", "310", "320", "330", "345"]'
720 data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
721 '["1", "1", "1", "1", "1", "1", "1", "1"]',
723 '["250", "260", "270", "280", "290", "300", "315", "330"]'
726 form = TaskForm_list(task.remd_nrep,initial=data)
727 p_type='replica exchange molecular dynamics - advanced options'
728 return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
731 def details(request,task_id):
732 task = get_object_or_404(Task, id=task_id)
733 return render(request, "details.html",{'task':task})
736 def details1(request,user_id,task_id):
737 task = get_object_or_404(Task, id=task_id)
738 return render(request, "details1.html",{'task':task})
742 def delete(request, task_id):
743 Task.objects.get(id=task_id).delete()
746 def refresh_done1(request, task_id):
747 task = get_object_or_404(Task, id=task_id)
751 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
754 for line in proc.stdout:
755 if 'piasek4' in line:
756 if line.split()[1]=='test_server':
758 if line.split()[-2]=='Q':
760 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
762 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
766 def refresh_done(request):
768 tasks = Task.objects.filter(owner=user).order_by('-created_date')
775 proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
778 for line in proc.stdout:
779 if 'piasek4' in line:
780 if line.split()[1]=='test_server':
782 if line.split()[-2]=='Q':
784 variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
786 if is_lazy_user(request.user):
787 return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
789 return render(request, "index.html", {
791 'variable' : variable,
796 def refresh_done0(task):
797 if os.path.isfile(task.jobdirname+'/finished') and not task.done:
800 with open(task.jobdirname+'/file.out_GB000', 'r') as f:
802 if task.type=='min' or task.type=='md':
806 task.etot=line.split()[1]
808 if 'RMS deviation' in line:
816 if 'Total wall' in line:
819 elif task.type=='remd':
821 text="Acceptance for replica exchanges and number of exchange attempts\n"
826 text=text+' '.join(line.split()[2:])+"\n"
827 if j==task.remd_nrep:
829 text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
831 if 'Total wall' in line:
834 task.results_text=text
837 if task.md_pdbref and task.type=='remd':
841 with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
844 task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
846 task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
848 task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
850 task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
852 task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
853 except EnvironmentError:
854 print 'file_wham_T*pdb open error'
856 with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
859 if 'RMSD of the common residues=' in line:
860 text=' RMSD='+line.split()[5]
861 if 'TM-score =' in line:
862 text=text+' TMscore='+line.split()[2]
863 if 'GDT-TS-score=' in line:
864 text=text+' GDT_TS='+line.split()[1]
867 task.remd_model1=task.remd_model1+text
869 task.remd_model2=task.remd_model2+text
871 task.remd_model3=task.remd_model3+text
873 task.remd_model4=task.remd_model4+text
875 task.remd_model5=task.remd_model5+text
879 if task.type=='remd':
880 with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
883 if 'sumprob' in line:
890 task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
892 task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
894 task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
896 task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
898 task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
903 elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
904 if (task.type=='min'):
907 with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
912 last = line.split()[0]
915 task.running=int(1+int(last)*100.0/task.md_nstep)