NREP - number of temperatures
[django_unres.git] / django_simple / todo / forms.py
index 8bf9db1..50dab80 100644 (file)
@@ -4,6 +4,7 @@ from .models import MIN_CHOICE
 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
 
@@ -108,11 +109,11 @@ class MultiExampleField(forms.fields.MultiValueField):
 
 
 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,
@@ -141,7 +142,7 @@ class TaskForm_min(forms.Form):
 
             
 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')
@@ -190,7 +191,7 @@ class TaskForm_min_a(forms.Form):
 
 
 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')
@@ -208,7 +209,7 @@ class TaskForm_md(forms.Form):
      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')
                   
@@ -246,7 +247,7 @@ class TaskForm_md(forms.Form):
 
                         
 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')
@@ -271,14 +272,14 @@ class TaskForm_md_a(forms.Form):
      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')
@@ -335,7 +336,7 @@ class TaskForm_md_a(forms.Form):
                    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')
@@ -351,7 +352,7 @@ class TaskForm_remd(forms.Form):
       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')
                   
@@ -388,7 +389,7 @@ class TaskForm_remd(forms.Form):
 
                              
 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')
@@ -410,7 +411,7 @@ class TaskForm_remd_a(forms.Form):
       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,
@@ -426,10 +427,10 @@ class TaskForm_remd_a(forms.Form):
                   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)                  
@@ -495,9 +496,171 @@ class TaskForm_remd_a(forms.Form):
                    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):