three_to_one = dict(res_codes)
-def load_pdbid(pdbid,dirname):
- os.mkdir(dirname)
+def load_pdbid(pdbid,dirname,filename='plik.pdb'):
+ if (not os.path.isdir(dirname)):
+ os.mkdir(dirname)
if len(pdbid)==4:
file,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
- dirname+'/plik.pdb')
+ dirname+'/'+filename)
else:
chain=pdbid[5]
pdbid=pdbid[:4]
pdb_tmp=urllib.urlopen('http://files.rcsb.org/download/'+pdbid+'.pdb')
- with open(dirname+'/plik.pdb', 'w') as outfile:
+ with open(dirname+'/'+filename, 'w') as outfile:
for line in pdb_tmp:
if line[0:6] == 'SSBOND' and line[15] == chain and line[29] == chain:
outfile.write(line)
if line[0:6] == 'ATOM ' and line[21] == chain:
outfile.write(line)
+ if line[0:6] == 'ENDMDL':
+ break
pdb_tmp.close()
- file=dirname+'/plik.pdb'
+ file=dirname+'/'+filename
return(file)
user = request.user
tasks = Task.objects.filter(owner=user).order_by('-created_date')
variable = ''
+ tasks_count = Task.objects.filter(owner=user).count()
return render(request, "index.html", {
- 'tasks': tasks, 'alldone': 0
+ 'tasks': tasks, 'alldone': 0, 'tasks_count':tasks_count
})
@login_required
task.md_start=form.cleaned_data["md_start"]
task.md_temp=form.cleaned_data["md_temp"]
task.md_nstep=form.cleaned_data["md_nstep"]
+ task.md_total_steps=task.md_nstep
+ if task.md_nstep<250000:
+ task.md_ntwx=100
basename = str(task.owner)
suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
if task.md_start != "pdbstart":
task.ssbond=''
+ if any(c.islower() for c in seq):
+ task.md_respa=False
+ task.damino=True
+
task.ready=True
task.save()
task.md_temp=form.cleaned_data["md_temp"]
task.md_nstep=form.cleaned_data["md_nstep"]
+ task.md_total_steps=task.md_nstep
task.md_ntwe=form.cleaned_data["md_ntwe"]
task.md_ntwx=form.cleaned_data["md_ntwx"]
task.md_dt=form.cleaned_data["md_dt"]
task.md_mdpdb=form.cleaned_data["md_mdpdb"]
task.unres_ff=form.cleaned_data["unres_ff"]
task.md_respa=form.cleaned_data["md_respa"]
+ if any(c.islower() for c in seq):
+ task.md_respa=False
+ task.damino=True
task.boxx=form.cleaned_data["boxx"]
task.boxy=form.cleaned_data["boxy"]
task.boxz=form.cleaned_data["boxz"]
task.md_seed=form.cleaned_data["md_seed"]
task.md_nstep=form.cleaned_data["md_nstep"]
+ task.md_total_steps=task.md_nstep
+
+ if any(c.islower() for c in seq):
+ task.md_respa=False
+ task.damino=True
task.ready=True
data= {'name':task.name,'pdbid':'2KMS','md_pdbref':True,'md_start':'pdbstart',
'md_2d':'----EEEEEE-EEEEE-------EEEEEEEEE--EEEEEE-EEEE---EEEEEEEEE-----EEEEEEE-EEE-HHHHH-EEEE-EEEEEEEEE----EEEEEE---EEE-----',
'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
- 'remd_cluter_temp':280,
+ 'remd_cluter_temp':280, 'min_maxfun':50,
'scal_rad':5.0,'wsaxs':1000.0,'saxs_data':
"""0.7100E-00 0.2036E-03
0.1420E+01 0.4221E-03
task.md_seed=form.cleaned_data["md_seed"]
task.md_nstep=form.cleaned_data["md_nstep"]
+ task.md_total_steps=task.md_nstep
task.md_dt=form.cleaned_data["md_dt"]
task.md_lang=form.cleaned_data["md_lang"]
task.md_tau=form.cleaned_data["md_tau"]
task.md_ntwx=form.cleaned_data["md_ntwx"]
task.md_ntwe=form.cleaned_data["md_ntwe"]
task.md_respa=form.cleaned_data["md_respa"]
+ if any(c.islower() for c in seq):
+ task.md_respa=False
+ task.damino=True
+
# task.remd_traj1file=form.cleaned_data["remd_traj1file"]
# task.remd_rest1file=form.cleaned_data["remd_rest1file"]
return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
@login_required
+def add_dock(request,task_id):
+ task = get_object_or_404(Task, id=task_id)
+ if request.method == 'POST':
+ if '_example' in request.POST:
+ data= {'name':task.name,'pdbid':'1BON:A','pdbid2':'1BON:B','md_seed':-12396738,'md_nstep':500000}
+ form = TaskForm_dock(initial=data)
+ else:
+ form = TaskForm_dock(request.POST,request.FILES)
+ if form.is_valid():
+ task.name=form.cleaned_data["name"]
+ task.type="dock"
+
+ basename = str(task.owner)
+ suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
+ task.jobdirname = "_".join([basename, suffix])
+
+ pdbid=form.cleaned_data["pdbid"]
+ if pdbid:
+ task.myfile1=load_pdbid(pdbid,task.jobdirname)
+ task.pdbcode=pdbid
+ else:
+ task.myfile1=form.cleaned_data["file1"]
+
+ pdbid2=form.cleaned_data["pdbid2"]
+ if pdbid2:
+ task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
+ task.pdbcode2=pdbid2
+ else:
+ task.myfile2=form.cleaned_data["file2"]
+
+ task.md_ntwx=task.remd_nstex
+ task.md_start="pdbstart"
+ task.remd_multi_m='["3", "3", "3", "3", "3", "3", "3", "3"]'
+ task.md_pdbref=True
+ task.md_respa=False
+ task.ssbond=""
+ task.dock_peptide=form.cleaned_data["dock_peptide"]
+
+ task.md_seq=""
+
+ seq1,ssbond1=from_pdb(task.myfile1)
+ seq2,ssbond2=from_pdb(task.myfile2)
+
+ if seq1[-1]=='X' and seq2[0]=='X':
+ seq=seq1+seq2
+ elif seq1[-1]!='X' and seq2[0]!='X':
+ seq=seq1+'XX'+seq2
+ else:
+ seq=seq1+'X'+seq2
+
+ for i in range(0,len(seq),40):
+ task.md_seq=task.md_seq+seq[i:i+40]+" "
+
+ task.md_seed=form.cleaned_data["md_seed"]
+
+ task.md_nstep=form.cleaned_data["md_nstep"]
+ task.md_total_steps=task.md_nstep
+
+ if any(c.islower() for c in seq):
+ task.md_respa=False
+ task.damino=True
+
+
+ task.ready=True
+
+
+ task.save()
+ if is_lazy_user(request.user):
+ return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')
+ else:
+ return redirect('/')
+ else:
+ data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
+ form = TaskForm_dock(initial=data)
+ basic_adv=True
+ p_type='docking'
+ return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
+
+@login_required
+def add_dock_a(request,task_id):
+ task = get_object_or_404(Task, id=task_id)
+ if request.method == 'POST':
+ if '_example' in request.POST:
+ data= {'name':task.name,'pdbid':'1L2Y','md_pdbref':True,'md_seed':-39912345}
+ form = TaskForm_dock_a(initial=data)
+ else:
+ form = TaskForm_dock_a(request.POST,request.FILES)
+ if form.is_valid():
+ task.name=form.cleaned_data["name"]
+ task.type="dock"
+
+ basename = str(task.owner)
+ suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
+ task.jobdirname = "_".join([basename, suffix])
+
+ pdbid=form.cleaned_data["pdbid"]
+ if pdbid:
+ task.myfile1=load_pdbid(pdbid,task.jobdirname)
+ task.pdbcode=pdbid
+ else:
+ task.myfile1=form.cleaned_data["file1"]
+
+ pdbid2=form.cleaned_data["pdbid2"]
+ if pdbid2:
+ task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
+ task.pdbcode2=pdbid2
+ else:
+ task.myfile2=form.cleaned_data["file2"]
+
+ task.md_ntwx=task.remd_nstex
+ task.md_start="pdbstart"
+ task.md_pdbref=True
+ task.md_respa=False
+ task.ssbond=""
+
+ task.md_seq=""
+
+ seq1,ssbond1=from_pdb(task.myfile1)
+ seq2,ssbond2=from_pdb(task.myfile2)
+
+ if seq1[-1]=='X' and seq2[0]=='X':
+ seq=seq1+seq2
+ elif seq1[-1]!='X' and seq2[0]!='X':
+ seq=seq1+'XX'+seq2
+ else:
+ seq=seq1+'X'+seq2
+
+ for i in range(0,len(seq),40):
+ task.md_seq=task.md_seq+seq[i:i+40]+" "
+
+ task.md_seed=form.cleaned_data["md_seed"]
+
+ task.md_nstep=form.cleaned_data["md_nstep"]
+ task.md_total_steps=task.md_nstep
+
+ task.md_dt=form.cleaned_data["md_dt"]
+ task.md_lang=form.cleaned_data["md_lang"]
+ task.md_tau=form.cleaned_data["md_tau"]
+ task.md_scal_fric=form.cleaned_data["md_scal_fric"]
+ task.min_maxfun=form.cleaned_data["min_maxfun"]
+ task.remd_nrep=form.cleaned_data["remd_nrep"]
+ task.remd_nstex=form.cleaned_data["remd_nstex"]
+ task.md_ntwx=form.cleaned_data["md_ntwx"]
+ task.md_ntwe=form.cleaned_data["md_ntwe"]
+
+ task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
+ task.unres_ff=form.cleaned_data["unres_ff"]
+
+ if any(c.islower() for c in seq):
+ task.md_respa=False
+ task.damino=True
+
+ task.save()
+ return redirect('addmlist',task_id=task.id)
+
+ else:
+ data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
+ form = TaskForm_dock_a(initial=data)
+ basic_adv=False
+ p_type='docking - advanced options'
+ return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
+
+
+
+@login_required
def addmlist(request,task_id):
task = get_object_or_404(Task, id=task_id)
if request.method == 'POST':
def delete(request, task_id):
Task.objects.get(id=task_id).delete()
return redirect('/')
+
+@login_required
+def restart(request, task_id):
+ task = get_object_or_404(Task, id=task_id)
+ restart0(task)
+ return redirect('/')
+
+def add_restart_inp():
+ with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
+ for line in f1:
+ if 'reset_vel=' in line:
+ f2.write('{:79}'.format('restart'+line[7:]))
+ else:
+ f2.write(line)
+ os.remove('file.inp')
+ os.rename('file.inp.tmp','file.inp')
+ return
+
+def restart0(task):
+ if os.path.isfile(task.jobdirname+'/finished'):
+ os.remove(task.jobdirname+'/finished')
+ task.running =1
+ task.done=False
+ task.md_total_steps = task.md_total_steps+task.md_nstep
+ task.save()
+ if task.type == 'md':
+ os.chdir(task.jobdirname)
+ add_restart_inp()
+ ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ os.chdir('..')
+ elif task.type == 'remd':
+ os.chdir(task.jobdirname)
+ add_restart_inp()
+ tmp1=json.loads(task.remd_multi_m)
+ nreplicas=sum(map(int, tmp1))
+ with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
+ for line in f1:
+ if 'rec_end=' in line:
+ rec=task.md_total_steps/task.md_ntwx
+ f2.write('nfile_cx=1 rec_start='+str(rec/10)
+ +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
+ elif 'isampl=' in line:
+ if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
+ isampl=1
+ else:
+ isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
+ f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
+ else:
+ f2.write(line)
+ os.remove('file_wham.inp')
+ os.rename('file_wham.tmp','file_wham.inp')
+ ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
+ os.chdir('..')
+ return
+
+def restart1(request, user_id, task_id):
+ task = get_object_or_404(Task, id=task_id)
+ user = task.owner
+ restart0(task)
+ return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
+
def refresh_done1(request, task_id):
task = get_object_or_404(Task, id=task_id)
def refresh_done(request):
user = request.user
tasks = Task.objects.filter(owner=user).order_by('-created_date')
+ tasks_count = Task.objects.filter(owner=user).count()
alldone = 1
for task in tasks:
refresh_done0(task)
return render(request, "index.html", {
'tasks': tasks ,
'variable' : variable,
- 'alldone': alldone
+ 'alldone': alldone,
+ 'tasks_count':tasks_count
})
if 'Total wall' in line:
text=text+line
- elif task.type=='remd':
+ elif task.type=='remd' or task.type=='dock':
j=0
text="Acceptance for replica exchanges and number of exchange attempts\n"
for line in f:
task.results_text=text
- if task.md_pdbref and task.type=='remd':
+ if task.md_pdbref and task.type=='remd' or task.type=='dock':
for i in range(1,6):
try:
task.remd_model4=task.remd_model4+text
elif i==5:
task.remd_model5=task.remd_model5+text
+
+ if task.type=='dock':
+ for i in range(1,6):
+ with open(task.jobdirname+'/dockq_'+str(i)+'.out', 'r') as f:
+ text=''
+ for line in f:
+ if 'Fnat' in line:
+ text=' Fnat='+line.split()[1]
+ if 'iRMS' in line:
+ text=text+' iRMS='+line.split()[1]
+ if 'LRMS' in line:
+ text=text+' LRMS='+line.split()[1]
+ if 'CAPRI' in line and not 'DockQ_CAPRI' in line:
+ text=text+' CAPRI='+line.split()[1]
+ if 'DockQ_CAPRI' in line:
+ text=text+' DockQ_CAPRI= '+line.split()[1]
+ if 'DockQ ' in line:
+ text=text+' DockQ='+line.split()[1]
+ if i==1:
+ task.remd_model1=task.remd_model1+text
+ elif i==2:
+ task.remd_model2=task.remd_model2+text
+ elif i==3:
+ task.remd_model3=task.remd_model3+text
+ elif i==4:
+ task.remd_model4=task.remd_model4+text
+ elif i==5:
+ task.remd_model5=task.remd_model5+text
- if task.type=='remd':
+ if task.type=='remd' or task.type=='dock':
with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
for line in f:
if i>6:
break
if i==1:
- task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
+ task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[-2]
elif i==2:
- task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
+ task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[-2]
elif i==3:
- task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
+ task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[-2]
elif i==4:
- task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
+ task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[-2]
elif i==5:
- task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
+ task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[-2]
elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
if (task.type=='min'):
task.running =1
+ with open(task.jobdirname+'/file.out_GB000', 'r') as f:
+ line=''
+ for line in f:
+ pass
+ if line != '':
+ last = line.split()[0]
+ else:
+ last = 0
+ try:
+ task.running=int(1+int(last)*100.0/task.min_maxmin)
+ except:
+ pass
+ if task.running>100:
+ task.running=100
else:
with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
line=''
return
+
+@login_required
+def zip_all_files(request, task_id):
+ import os, zipfile
+ from django.http import HttpResponse
+ from wsgiref.util import FileWrapper
+ from django.core.files.temp import NamedTemporaryFile
+
+ task = get_object_or_404(Task, id=task_id)
+
+ temp=NamedTemporaryFile()
+ archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
+ for (dirpath, dirnames, filenames) in os.walk(task.jobdirname):
+ for file1 in filenames:
+ archive.write(dirpath+"/"+file1,file1)
+ archive.close()
+ temp.seek(0)
+ wrapper = FileWrapper(temp)
+ response = HttpResponse(wrapper, content_type='application/zip')
+ response['Content-Disposition'] = 'attachment; filename=all.zip'
+ return response