self.add_error('md_2d',msg)
+class TaskForm_dock(forms.Form):
+ name = forms.CharField(max_length=40,widget=forms.TextInput(attrs={'size':40, 'maxlength':40}))
+
+ file1 = forms.FileField(label='Upload a PDB file1',required=False,
+ help_text='starting structure for chain1')
+ pdbid = forms.CharField(min_length=4,max_length=6,required=False,
+ widget=forms.TextInput(attrs={'size':6, 'maxlength':6, 'title':'PDB code or PDB code:chain id'}),
+ label='or PDB code (:chain)')
+
+
+ file2 = forms.FileField(label='Upload a PDB file2',required=False,
+ help_text='starting structure for chain2')
+ pdbid2 = forms.CharField(min_length=4,max_length=6,required=False,
+ widget=forms.TextInput(attrs={'size':6, 'maxlength':6, 'title':'PDB code or PDB code:chain id'}),
+ label='or PDB code (:chain)')
+
+
+ md_nstep = forms.IntegerField(label='NSTEP',initial=200000,
+ help_text='total number of steps')
+ md_seed = forms.IntegerField(label='SEED',initial=-39912345,
+ help_text='seed for random number generator')
+
+ def clean(self):
+ cleaned_data = super(TaskForm_dock, self).clean()
+
+ file1 = cleaned_data.get("file1")
+ pdbid = cleaned_data.get("pdbid")
+ file2 = cleaned_data.get("file2")
+ pdbid2 = cleaned_data.get("pdbid2")
+
+
+ if not (file1 or pdbid):
+ msg = 'no PDB file or code for chain1'
+ self.add_error('file1', msg)
+
+ if not (file2 or pdbid2):
+ msg = 'no PDB file or code for chain2'
+ self.add_error('file2', msg)
+
+ if pdbid:
+ msg=pdb_code_chain(pdbid)
+ if msg != '':
+ self.add_error('pdbid',msg)
+
+ if file1:
+ msg=pdb_missing_res_chain(file1,'')
+ if msg != '':
+ self.add_error('file1',msg)
+
+ if pdbid2:
+ msg=pdb_code_chain(pdbid2)
+ if msg != '':
+ self.add_error('pdbid2',msg)
+
+ if file2:
+ msg=pdb_missing_res_chain(file2,'')
+ if msg != '':
+ self.add_error('file2',msg)
+
class TaskForm_list(forms.Form):
name = forms.CharField(max_length=40,disabled=True,required=False)
if instance.md_mdpdb:
type_line = type_line + ' mdpdb '
- if instance.type == 'remd' :
+ if instance.type == 'remd' or instance.type == 'dock':
control_line = 'SEED='+str(instance.md_seed)+' '\
+instance.md_start +' re one_letter'\
+ ' BOXX='+str(instance.boxx) \
+ ' BOXY='+str(instance.boxy) \
+ ' BOXZ='+str(instance.boxz) +' '
+
+ if instance.type == 'dock':
+ control_line = control_line+'CONSTR_HOMOL=20 '
if instance.md_pdbref:
control_line = control_line+'pdbref '
f.write(word_list[-1]+'\n')
if instance.md_start == 'pdbstart':
- if instance.type == 'remd' :
+ if instance.type == 'remd' or instance.type == 'dock':
f.write('print_min_ini print_min_res print_min_stat maxfun='+
str(instance.min_maxfun)+'\n')
else:
f.write('print_min_ini print_min_res print_min_stat\n')
- if instance.type == 'remd' :
+ if instance.type == 'remd' or instance.type == 'dock':
word_list = wrapper.wrap(text=type_line2)
for element in word_list[:-1]:
f.write('{:79}'.format(element)+'&\n')
if instance.type == 'min' or instance.md_start == 'pdbstart':
- f.write('plik.pdb\n')
+ if instance.type == 'dock':
+ f.write('model01.pdb\n')
+ else:
+ f.write('plik.pdb\n')
f.write(write_ssbond(instance.ssbond))
if instance.md_2d == '':
f.write('0\n')
else:
f.write(seq_2d_write(seq_2d_xx(instance.md_2d,seq)))
+
+ if instance.type == 'dock':
+ f.write('HOMOL_DIST=0.1 HOMOL_ANGLE=1.0 HOMOL_THETA=1.0 HOMOL_SCD=1.0 DIST_CUT=15.0 &\n')
+ f.write('READ2SIGMA START_FROM_MODELS\n')
+ for i in range(1,10):
+ f.write('model0'+str(i)+'.pdb\n')
+ for i in range(10,21):
+ f.write('model'+str(i)+'.pdb\n')
if instance.type == 'md' and instance.md_start != 'pdbstart':
f2.write(line.replace('#PBS -l nodes=4:ppn=4', pbs))
elif '$ssbond' in line:
f2.write(line.replace('$ssbond',tmp_ss))
+ elif 'cd $PBS_O_WORKDIR' in line and instance.type == 'dock':
+ f2.write(line)
+ f2.write('../files/generator_v7 plik.pdb plik2.pdb\n')
else:
tmp1=json.loads(instance.remd_multi_t)
f2.write(line.replace('$temperatures','"'+" ".join(tmp1)+'" '+str(nreplicas)))
' einicheck=1 rescale=2 delta=0.02 cxfile')+'&\n')
if instance.md_2d != '':
f.write('{:79}'.format(' WITH_DIHED_CONSTR')+'&\n')
+ if instance.type == 'dock':
+ f.write('{:79}'.format(' n_ene=19 CONSTR_HOMOL=20')+'&\n')
f.write('BOXX='+str(instance.boxx)+' BOXY='+str(instance.boxy)+
' BOXZ='+str(instance.boxz)+cntrl_saxs +'\n')
f.write(write_ssbond(instance.ssbond))
+ if instance.type == 'dock':
+ f.write('HOMOL_DIST=0.1 HOMOL_ANGLE=1.0 HOMOL_THETA=1.0 HOMOL_SCD=1.0 DIST_CUT=15.0 &\n')
+ f.write('READ2SIGMA \n')
+ for i in range(1,10):
+ f.write('model0'+str(i)+'.pdb\n')
+ for i in range(10,21):
+ f.write('model'+str(i)+'.pdb\n')
+
if instance.md_2d != '':
f.write(seq_2d_write_50(seq_2d_xx(instance.md_2d,seq)))
+' temper='+str(instance.remd_cluter_temp))+'&\n')
if instance.md_2d != '':
f.write('{:79}'.format(' WITH_DIHED_CONSTR')+'&\n')
+ if instance.type == 'dock':
+ f.write('{:79}'.format(' CONSTR_HOMOL=20')+'&\n')
f.write('BOXX='+str(instance.boxx)+' BOXY='+str(instance.boxy)+
' BOXZ='+str(instance.boxz)+cntrl_saxs +'\n')
f.write(w+'\n')
for i in range(0,len(seq),80):
f.write(seq[i:i+80]+'\n')
f.write(write_ssbond(instance.ssbond))
+ if instance.type == 'dock':
+ f.write('HOMOL_DIST=0.1 HOMOL_ANGLE=1.0 HOMOL_THETA=1.0 HOMOL_SCD=1.0 DIST_CUT=15.0 &\n')
+ f.write('READ2SIGMA \n')
+ for i in range(1,10):
+ f.write('model0'+str(i)+'.pdb\n')
+ for i in range(10,21):
+ f.write('model'+str(i)+'.pdb\n')
if instance.md_2d != '':
f.write(seq_2d_write_50(seq_2d_xx(instance.md_2d,seq)))
if instance.saxs_data != '':
# file will be uploaded to MEDIA_ROOT/<jobdirname>/plik.pdb
return '{0}/{1}'.format(instance.jobdirname, 'plik.pdb')
+def user_directory_path2(instance, filename):
+ # file will be uploaded to MEDIA_ROOT/<jobdirname>/plik2.pdb
+ return '{0}/{1}'.format(instance.jobdirname, 'plik2.pdb')
+
# Create your models here.
class Task(models.Model):
scal_rad = models.FloatField(default=1.0)
wsaxs = models.FloatField(default=1000.0)
saxs_data = models.TextField(max_length=10000,default='')
-
+
+#dock
+ myfile2 = models.FileField(default='',upload_to=user_directory_path2)
+ pdbcode2 = models.CharField(max_length=6,default='')
# system
ready = models.BooleanField(default=False)
{% endif %}
- {% if task.type == "remd" %}
+ {% if task.type == "remd" or task.type == "dock" %}
<li class="list-group-item task-item">
<div class="col-md-6"> nrep </div>
<div class="col-md-6"> pdb code</div>
<div class="col-md-6">{{ task.pdbcode }}</div>
</li>
+ {% if task.type == "dock" %}
+ <li class="list-group-item task-item">
+ <div class="col-md-6"> input pdb2 </div>
+ <div class="col-md-6">{{ task.myfile2 }}</div>
+ </li>
+ <li class="list-group-item task-item">
+ <div class="col-md-6"> pdb code2</div>
+ <div class="col-md-6">{{ task.pdbcode2 }}</div>
+ </li>
+
+ {% endif %}
<li class="list-group-item task-item">
<div class="col-md-6"> seed </div>
<div class="col-md-6">{{ task.md_seed}}</div>
{% endif %}
- {% if task.type == "remd" %}
+ {% if task.type == "remd" or task.type == "dock" %}
<li class="list-group-item task-item">
<div class="col-md-2"> Energy histogram </div>
});
</script>
-{% if task.type == "remd" %}
+{% if task.type == "remd" or task.type == "dock" %}
<script>
function display_model(numstr){
<input type="submit" class="btn btn-default" value="MREMD" name="p4btn"></button>
</form>
+ <form action="../../add_dock/{{task.id}}/" method="get"
+ style="text-align;float:left;">
+ {% csrf_token %}
+ <input type="submit" class="btn btn-default" value="DOCK" name="p5btn"></button>
+ </form>
+
{% else %}
<form action=".." method="get" style="text-align;float:right;">
<input type="submit" class="btn btn-default" value="MREMD" name="p4btn"></button>
</form>
+ <form action="../../../add_dock/{{task.id}}/adv/" method="get"
+ style="text-align;float:left;">
+ {% csrf_token %}
+ <input type="submit" class="btn btn-default" value="DOCK" name="p5btn"></button>
+ </form>
+
{% endif %}
url(r'^add_md/(?P<task_id>\d+)/adv/$', views.add_md_a,name='add_md_a'),
url(r'^add_remd/(?P<task_id>\d+)/$', views.add_remd,name='add_remd'),
url(r'^add_remd/(?P<task_id>\d+)/adv/$', views.add_remd_a,name='add_remd_a'),
+ url(r'^add_dock/(?P<task_id>\d+)/$', views.add_dock,name='add_dock'),
+ url(r'^add_dock/(?P<task_id>\d+)/adv/$', views.add_dock_a,name='add_dock_a'),
url(r'^add_mlist/(?P<task_id>\d+)/$', views.addmlist,name='addmlist'),
url(r'^details/(?P<task_id>\d+)/$', views.details,name='details'),
url(r'^details1/(?P<user_id>\w+)/(?P<task_id>\d+)/$', views.details1,name='details1'),
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)
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':'1L2Y','md_seed':-39912345}
+ 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.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"]
+
+ 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_remd(initial=data)
+ else:
+ form = TaskForm_remd(request.POST,request.FILES)
+ if form.is_valid():
+ task.name=form.cleaned_data["name"]
+ task.type="remd"
+ task.md_start=form.cleaned_data["md_start"]
+
+ 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"]
+ task.md_pdbref=form.cleaned_data["md_pdbref"]
+ task.md_ntwx=task.remd_nstex
+
+ task.md_seq=""
+ if task.md_start == "pdbstart" or task.md_pdbref:
+ seq,task.ssbond=from_pdb(task.myfile1)
+ else:
+ seq=seq_add_x(form.cleaned_data["md_seq"])
+ for i in range(0,len(seq),40):
+ task.md_seq=task.md_seq+seq[i:i+40]+" "
+
+ if task.md_start != "pdbstart":
+ task.ssbond=''
+
+ task.md_seed=form.cleaned_data["md_seed"]
+
+ task.md_nstep=form.cleaned_data["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_remd(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':
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: