from .models import MD_START
from .models import MD_LANG
from .models import FF_CHOICE
+from django.utils.safestring import mark_safe
import json
import urllib
class TaskForm(forms.Form):
- name = forms.CharField(max_length=20)
+ name = forms.CharField(max_length=40,widget=forms.TextInput(attrs={'size':40, 'maxlength':40}))
class TaskForm_min(forms.Form):
- name = forms.CharField(max_length=20)
+ name = forms.CharField(max_length=40,widget=forms.TextInput(attrs={'size':40, 'maxlength':40}))
file1 = forms.FileField(label='Upload a PDB file',required=False,
help_text='continuous (without breaks) protein chains,use TER to divide chains')
pdbid = forms.CharField(min_length=4,max_length=6,required=False,
class TaskForm_min_a(forms.Form):
- name = forms.CharField(max_length=20)
+ name = forms.CharField(max_length=40,widget=forms.TextInput(attrs={'size':40, 'maxlength':40}))
unres_ff = forms.ChoiceField(choices=FF_CHOICE,widget=forms.RadioSelect,
label='Force Field',initial='FF2')
class TaskForm_md(forms.Form):
- name = forms.CharField(max_length=20)
+ name = forms.CharField(max_length=40,widget=forms.TextInput(attrs={'size':40, 'maxlength':40}))
md_start = forms.ChoiceField(choices=MD_START,widget=forms.RadioSelect,
label='starting structure',initial='extconf')
md_temp = forms.FloatField(label='temperature',initial=300,
help_text='bath temperature')
md_nstep = forms.IntegerField(label='NSTEP',initial=200000,
- help_text='total number of steps')
+ help_text='total number of steps',max_value=10000000)
md_seed = forms.IntegerField(label='SEED',initial=-39912345,
help_text='seed for random number generator')
class TaskForm_md_a(forms.Form):
- name = forms.CharField(max_length=20)
+ name = forms.CharField(max_length=40,widget=forms.TextInput(attrs={'size':40, 'maxlength':40}))
unres_ff = forms.ChoiceField(choices=FF_CHOICE,widget=forms.RadioSelect,
label='Force Field',initial='FF2')
md_temp = forms.FloatField(label='temperature',initial=300,
help_text='bath temperature')
md_nstep = forms.IntegerField(label='NSTEP',initial=200000,
- help_text='total number of steps')
+ help_text='total number of steps',max_value=10000000)
md_seed = forms.IntegerField(label='SEED',initial=-39912345,
help_text='seed for random number generator')
md_ntwe = forms.IntegerField(label='NTWE',initial=1000,
help_text='write statfile every ntwe steps')
md_ntwx = forms.IntegerField(label='NTWX',initial=1000,
- help_text='write trajectory every ntwe steps')
+ help_text='write trajectory every ntwe steps',min_value=100)
md_dt = forms.FloatField(label='DT',initial=0.2,
help_text='time step [mtu=48.9 fs]')
md_lang = forms.ChoiceField(choices=MD_LANG,label='thermostat')
self.add_error('md_2d',msg)
class TaskForm_remd(forms.Form):
- name = forms.CharField(max_length=20)
+ name = forms.CharField(max_length=40,widget=forms.TextInput(attrs={'size':40, 'maxlength':40}))
md_start = forms.ChoiceField(choices=MD_START,widget=forms.RadioSelect,
label='starting structure',initial='extconf')
label='or PDB code (:chain)')
md_pdbref = forms.BooleanField(required=False,label='PDB reference structure')
md_nstep = forms.IntegerField(label='NSTEP',initial=200000,
- help_text='total number of steps')
+ help_text='total number of steps',max_value=10000000)
md_seed = forms.IntegerField(label='SEED',initial=-39912345,
help_text='seed for random number generator')
class TaskForm_remd_a(forms.Form):
- name = forms.CharField(max_length=20)
+ name = forms.CharField(max_length=40,widget=forms.TextInput(attrs={'size':40, 'maxlength':40}))
unres_ff = forms.ChoiceField(choices=FF_CHOICE,widget=forms.RadioSelect,
label='Force Field',initial='FF2')
label='or PDB code (:chain)')
md_pdbref = forms.BooleanField(required=False,label='PDB reference structure')
md_nstep = forms.IntegerField(label='NSTEP',initial=200000,
- help_text='total number of steps')
+ help_text='total number of steps',max_value=10000000)
md_seed = forms.IntegerField(label='SEED',initial=-39912345,
help_text='seed for random number generator')
md_ntwe = forms.IntegerField(label='NTWE',initial=1000,
help_text='preminim maximum number of function evaluations<br>'+
'used for start from pdb or random start')
remd_nrep = forms.IntegerField(label='NREP',initial=8,
- help_text='number of replicas')
+ help_text='number of temperatures')
remd_nstex = forms.IntegerField(label='NSTEX',initial=1000,
help_text='exchange and write trajectory every nstex steps')
- md_ntwx = forms.IntegerField(label='NTWX',initial=1000,
+ md_ntwx = forms.IntegerField(label='NTWX',initial=1000,min_value=100,
help_text='write trajectory every ntwx steps')
remd_cluter_temp = forms.FloatField(label='TEMPER',
help_text='temperature for cluster analysis',initial=280)
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)')
+
+
+ md_seq = forms.CharField(label=mark_safe('Sequence of chain2 <br /> for dock peptide'),
+ help_text='aminoacid sequence using one letter code<br>'+
+ 'field is ignored when uploading PDB file2',
+ required=False,
+ widget=forms.Textarea(attrs={'cols': 70, 'rows': 2}))
+
+
+ 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', max_value=10000000)
+ md_seed = forms.IntegerField(label='SEED',initial=-39912345,
+ help_text='seed for random number generator')
+ dock_peptide = forms.BooleanField(required=False,initial=False,
+ label='dock peptide',help_text='no constraints on chain2')
+
+ 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")
+ md_seq = cleaned_data.get("md_seq")
+
+
+ if not (file1 or pdbid):
+ msg = 'no PDB file or code for chain1'
+ self.add_error('file1', msg)
+
+ if not (file2 or pdbid2 or md_seq):
+ msg = 'no PDB file or code or sequence 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_dock_a(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)')
+
+ md_seq = forms.CharField(label=mark_safe('Sequence of chain2 <br /> for dock peptide'),
+ help_text='aminoacid sequence using one letter code<br>'+
+ 'field is ignored when uploading PDB file2',
+ required=False,
+ widget=forms.Textarea(attrs={'cols': 70, 'rows': 2}))
+
+
+ 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', max_value=10000000)
+ md_seed = forms.IntegerField(label='SEED',initial=-39912345,
+ help_text='seed for random number generator')
+ dock_peptide = forms.BooleanField(required=False,initial=False,
+ label='dock peptide',help_text='no constraints on 2nd chain')
+
+
+ unres_ff = forms.ChoiceField(choices=FF_CHOICE,widget=forms.RadioSelect,
+ label='Force Field',initial='FF2')
+
+ md_ntwe = forms.IntegerField(label='NTWE',initial=1000,
+ help_text='write statfile every ntwe steps')
+ md_dt = forms.FloatField(label='DT',initial=0.2,
+ help_text='time step [mtu = 48.9 fs]')
+ md_lang = forms.ChoiceField(choices=MD_LANG,label='thermostat')
+ md_tau = forms.FloatField(label='tau_bath',initial=1.0,
+ help_text='coupling to the thermal bath (Berendsen)')
+ md_scal_fric = forms.FloatField(label='scal_froc',initial=0.02,
+ help_text='scaling of the friction coefficients (Langevin)')
+ min_maxfun = forms.IntegerField(label='MAXFUN',initial=5000,
+ help_text='preminim maximum number of function evaluations<br>'+
+ 'used for start from pdb or random start')
+ remd_nrep = forms.IntegerField(label='NREP',initial=8,
+ help_text='number of temperatures')
+ remd_nstex = forms.IntegerField(label='NSTEX',initial=1000,
+ help_text='exchange and write trajectory every nstex steps')
+ md_ntwx = forms.IntegerField(label='NTWX',initial=1000,min_value=100,
+ help_text='write trajectory every ntwx steps')
+ remd_cluter_temp = forms.FloatField(label='TEMPER',
+ help_text='temperature for cluster analysis',initial=280)
+
+
+ def clean(self):
+ cleaned_data = super(TaskForm_dock_a, self).clean()
+
+ file1 = cleaned_data.get("file1")
+ pdbid = cleaned_data.get("pdbid")
+ file2 = cleaned_data.get("file2")
+ pdbid2 = cleaned_data.get("pdbid2")
+ md_seq = cleaned_data.get("md_seq")
+
+ if not (file1 or pdbid):
+ msg = 'no PDB file or code for chain1'
+ self.add_error('file1', msg)
+
+ if not (file2 or pdbid2 or md_seq):
+ msg = 'no PDB file or code or sequence 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=20,disabled=True,required=False)
+ name = forms.CharField(max_length=40,disabled=True,required=False)
nrep = forms.IntegerField(disabled=True,required=False,label='NREP')
def __init__(self, count, *args, **kwargs):