import json
import urllib
+def code_2d(line):
+ msg=''
+ set ='HEC-'
+ line2 = ''.join([c for c in line if c in set])
+ if line2 != line:
+ msg='use only H,E,C or - letters'
+ return(msg)
+
def pdb_missing_res(file):
msg=''
newchain = True
'field is ignored when uploading starting/reference PDB file',
required=False,
widget=forms.Textarea(attrs={'cols': 70, 'rows': 2}))
+ md_2d = forms.CharField(label='Secondary structure restraints',
+ help_text='single letter code: H - helix, E - extended/beta, C or - no restraints',
+ required=False,
+ widget=forms.Textarea(attrs={'cols': 70, 'rows': 2}))
+
file1 = forms.FileField(label='Upload a PDB file',required=False,
help_text='starting structure for pdbstart/reference structure')
pdbid = forms.CharField(min_length=4,max_length=4,required=False,
pdbid = cleaned_data.get("pdbid")
md_seq = cleaned_data.get("md_seq")
md_pdbref = cleaned_data.get("md_pdbref")
+ md_2d = cleaned_data.get("md_2d")
if md_start == 'pdbstart' and not (file1 or pdbid):
msg = 'pdbstart with no PDB file or code'
msg=pdb_missing_res(file1)
if msg != '':
self.add_error('file1',msg)
-
+
+ if md_2d:
+ msg=code_2d(md_2d)
+ if msg != '':
+ self.add_error('md_2d',msg)
class TaskForm_remd(forms.Form):
name = forms.CharField(max_length=20)
'field is ignored when uploading starting/reference PDB file',
required=False,
widget=forms.Textarea(attrs={'cols': 70, 'rows': 2}))
+ md_2d = forms.CharField(label='Secondary structure restraints',
+ help_text='single letter code: H - helix, E - extended/beta, C or - no restraints',
+ required=False,
+ widget=forms.Textarea(attrs={'cols': 70, 'rows': 2}))
file1 = forms.FileField(label='Upload a PDB file',required=False,
help_text='starting structure for pdbstart/reference structure')
pdbid = forms.CharField(min_length=4,max_length=4,required=False,
pdbid = cleaned_data.get("pdbid")
md_seq = cleaned_data.get("md_seq")
md_pdbref = cleaned_data.get("md_pdbref")
+ md_2d = cleaned_data.get("md_2d")
if md_start == 'pdbstart' and not (file1 or pdbid):
msg = 'pdbstart with no PDB file or code'
if msg != '':
self.add_error('file1',msg)
+ if md_2d:
+ msg=code_2d(md_2d)
+ if msg != '':
+ self.add_error('md_2d',msg)
+
class TaskForm_list(forms.Form):
logging.basicConfig()
logger = logging.getLogger(__name__)
+def seq_2d_write(line):
+ line=line.replace(" ", "")
+ out='{:d}\n{:6.1f}\n'.format(len(line),50.0)
+ for i in range(1,4):
+ out=out+'{:5d}{:8.3f}{:8.3f}\n'.format(i,0.0,180.0)
+ for e in line[:-3]:
+ i+=1
+ if e=='-':
+ out=out+'{:5d}{:8.3f}{:8.3f}\n'.format(i,0.0,180.0)
+ elif e=='H':
+ out=out+'{:5d}{:8.3f}{:8.3f}\n'.format(i,50.0,20.0)
+ elif e=='E':
+ out=out+'{:5d}{:8.3f}{:8.3f}\n'.format(i,180.0,40.0)
+ return(out)
+
+def seq_2d_write_50(line):
+ line=line.replace(" ", "")
+ out='{:d}\n'.format(len(line))
+ for i in range(1,4):
+ out=out+'{:5d}{:8.3f}{:8.3f}{:8.3f}\n'.format(i,0.0,180.0,50.0)
+ for e in line[:-3]:
+ i+=1
+ if e=='-':
+ out=out+'{:5d}{:8.3f}{:8.3f}{:8.3f}\n'.format(i,0.0,180.0,50.0)
+ elif e=='H':
+ out=out+'{:5d}{:8.3f}{:8.3f}{:8.3f}\n'.format(i,50.0,20.0,50.0)
+ elif e=='E':
+ out=out+'{:5d}{:8.3f}{:8.3f}{:8.3f}\n'.format(i,180.0,40.0,50.0)
+ return(out)
+
def write_ssbond(ssbond):
list=[]
if ssbond!='':
if instance.type == 'min' or instance.md_start == 'pdbstart':
f.write('plik.pdb\n')
f.write(write_ssbond(instance.ssbond))
- f.write('0\n')
-
+ if instance.md_seq_2d == '':
+ f.write('0\n')
+ else:
+ f.write(seq_2d_write(instance.md_seq_2d))
if instance.type == 'md' and instance.md_start != 'pdbstart':
f.write(str(len(seq))+'\n')
for i in range(0,len(seq),80):
f.write(seq[i:i+80]+'\n')
- f.write('0\n0\n')
+ f.write('0\n')
+ if instance.md_2d == '':
+ f.write('0\n')
+ else:
+ f.write(seq_2d_write(instance.md_2d))
+
if instance.type == 'remd' and instance.md_start != 'pdbstart':
f.write(str(len(seq))+'\n')
for i in range(0,len(seq),80):
f.write(seq[i:i+80]+'\n')
- f.write('0\n0\n')
+ f.write('0\n')
+ if instance.md_2d == '':
+ f.write('0\n')
+ else:
+ f.write(seq_2d_write(instance.md_2d))
+
if instance.saxs_data != '':
lines=instance.saxs_data.split('\n')
if instance.md_pdbref:
f.write('{:79}'.format('SEED='+str(instance.md_seed)+' isampl='+str(isampl)+
' einicheck=1 rescale=2 delta=0.02 cxfile classify')+'&\n')
- f.write('BOXX='+str(instance.boxx)+' BOXY='+str(instance.boxy)+
- ' BOXZ='+str(instance.boxz)+cntrl_saxs +'\n')
else:
f.write('{:79}'.format('SEED='+str(instance.md_seed)+' isampl='+str(isampl)+
' einicheck=1 rescale=2 delta=0.02 cxfile')+'&\n')
- f.write('BOXX='+str(instance.boxx)+' BOXY='+str(instance.boxy)+
+ if instance.md_2d != '':
+ f.write('{:79}'.format(' WITH_DIHED_CONSTR')+'&\n')
+ f.write('BOXX='+str(instance.boxx)+' BOXY='+str(instance.boxy)+
' BOXZ='+str(instance.boxz)+cntrl_saxs +'\n')
+
f.write('nres='+str(len(seq))+' one_letter\n')
for i in range(0,len(seq),80):
f.write(seq[i:i+80]+'\n')
f.write(write_ssbond(instance.ssbond))
+ if instance.md_2d != '':
+ f.write(seq_2d_write_50(instance.md_2d))
+
if instance.saxs_data != '':
fsaxs = open(instance.jobdirname+'/saxs.data', 'w')
lines=instance.saxs_data.split('\n')
f.write('{:79}'.format('nres='+str(len(seq))
+' one_letter rescale=2 PRINT_CART PDBOUT=1 iopt=1'
+' temper='+str(instance.remd_cluter_temp))+'&\n')
+ if instance.md_2d != '':
+ f.write('{:79}'.format(' WITH_DIHED_CONSTR')+'&\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.md_2d != '':
+ f.write(seq_2d_write_50(instance.md_2d))
if instance.saxs_data != '':
lines=instance.saxs_data.split('\n')
for line in lines:
md_scal_fric = models.FloatField(default=0.02)
md_mdpdb = models.BooleanField(default=False)
md_seq = models.TextField(max_length=2000,default='')
+ md_2d = models.TextField(max_length=2000,default='')
#remd
remd_nrep = models.IntegerField(default=8)
</li>
<li class="list-group-item task-item">
+ <div class="col-md-4"> secondary structure
+ restraints </div>
+ <div class="col-md-8">{{ task.md_2d}}</div>
+ </li>
+
+
+ <li class="list-group-item task-item">
<div class="col-md-6"> SSBOND </div>
<div class="col-md-6">{{ task.ssbond}}</div>
</li>
three_to_one = dict(res_codes)
+def seq_2d_from_pdb(seq_2d,seq):
+ if seq_2d =='':
+ return(seq_2d)
+ seq_2d=seq_2d.replace('C', '-')
+ seq_2d_tmp=''
+ ii=0
+ for i in range(0,len(seq)):
+ if seq[i]=='X':
+ seq_2d_tmp=seq_2d_tmp+'-'
+ else:
+ if len(seq_2d)>=ii:
+ seq_2d_tmp=seq_2d_tmp+seq_2d[ii]
+ ii+=1
+ tmp=''
+ for i in range(0,len(seq_2d_tmp),40):
+ tmp=tmp+seq_2d_tmp[i:i+40]+" "
+ return(tmp)
+
+def seq_2d_add_x(seq_2d,seq,seq_form):
+ if seq_2d =='':
+ return(seq_2d)
+ seq_2d=seq_2d[:len(seq_form)]
+ seq_2d=seq_2d.replace('C', '-')
+ if seq_form[0] !='X' and seq[0] == 'X':
+ seq_2d='-'+seq_2d
+ if seq_form[-1] !='X' and seq[-1] == 'X':
+ seq_2d=seq_2d+'-'
+ seq_2d=seq_2d[:len(seq)]
+ tmp=''
+ for i in range(0,len(seq_2d),40):
+ tmp=tmp+seq_2d[i:i+40]+" "
+ return(tmp)
+
def seq_add_x(sequence):
- if sequence[0] != 'G' and sequence[0] != 'g':
+ if sequence[0] != 'G' and sequence[0] != 'g' and sequence[0] != 'X':
sequence='X'+sequence
- if sequence[-1] != 'G' and sequence[-1] != 'g':
+ if sequence[-1] != 'G' and sequence[-1] != 'g' and sequence[-1] != 'X':
sequence=sequence+'X'
- set ='CDSQKIPTFNGHLRWAVEYMXcdsqkiptfnghlrwaveym'
+ set ='CDSQKIPTFNGHLRWAVEYMXcdsqkiptfnhlrwaveym'
sequence = ''.join([c for c in sequence if c in set])
return(sequence)
task.md_seq=""
if task.md_start == "pdbstart" or task.md_pdbref:
seq,task.ssbond=from_pdb(task.myfile1)
+ task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
else:
seq=seq_add_x(form.cleaned_data["md_seq"])
+ task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
+
for i in range(0,len(seq),40):
task.md_seq=task.md_seq+seq[i:i+40]+" "
task.md_seq=""
if task.md_start == "pdbstart" or task.md_pdbref:
seq,task.ssbond=from_pdb(task.myfile1)
+ task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
else:
seq=seq_add_x(form.cleaned_data["md_seq"])
+ task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])
+
for i in range(0,len(seq),40):
task.md_seq=task.md_seq+seq[i:i+40]+" "