UNRES-Dock peptide sequence no pdb
[django_unres.git] / django_simple / todo / views.py
index 6e8b105..1136355 100644 (file)
@@ -30,6 +30,29 @@ res_codes = [
 
 three_to_one = dict(res_codes)
 
+def dock_box(file):
+   import math
+   coord = list()
+   for line in file:
+            if line[0:6] == 'ATOM  ' and line[13:15] == 'CA':
+              x=float(line[30:38])
+              y=float(line[38:46])
+              z=float(line[46:54])
+              coord.append([x, y, z])
+            if line[0:3] == 'END':
+              break
+   maxd=0
+   l=len(coord)
+   for i in xrange(l):
+      for j in xrange(i+1,l):
+        p1=coord[i]
+        p2=coord[j]
+        d=(p1[0]-p2[0])**2 + (p1[1]-p2[1])**2 + (p1[2]-p2[2])**2
+        if d > maxd:
+          maxd=d
+   return math.sqrt(maxd)
+
+
 def load_pdbid(pdbid,dirname,filename='plik.pdb'):
     if (not os.path.isdir(dirname)):
        os.mkdir(dirname)
@@ -741,20 +764,28 @@ def add_dock(request,task_id):
              if pdbid2:
               task.myfile2=load_pdbid(pdbid2,task.jobdirname,'plik2.pdb')
               task.pdbcode2=pdbid2
+              seq2,ssbond2=from_pdb(task.myfile2)
              else:
               task.myfile2=form.cleaned_data["file2"]
+              if not task.myfile2:
+                seq2=seq_add_x(form.cleaned_data["md_seq"])
+                task.md_seq2=seq2
+              else:
+                seq2,ssbond2=from_pdb(task.myfile2)
 
              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
+             if task.md_seq2 =='':  
+               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
@@ -775,8 +806,17 @@ def add_dock(request,task_id):
               task.md_respa=False
               task.damino=True
 
-
+             box1=dock_box(task.myfile1)
+             if task.myfile2:
+              box2=dock_box(task.myfile2)
+             else:
+              box2=len(task.md_seq2)*2.0
+             task.boxx=(box1+box2)*1.2+20
+             task.boxy=(box1+box2)*1.2+20
+             task.boxz=(box1+box2)*1.2+20
+             
              task.ready=True
+
              
              
              task.save()
@@ -827,6 +867,7 @@ def add_dock_a(request,task_id):
              task.md_pdbref=True
              task.md_respa=False
              task.ssbond=""
+             task.dock_peptide=form.cleaned_data["dock_peptide"]
               
              task.md_seq=""
 
@@ -865,10 +906,12 @@ def add_dock_a(request,task_id):
               task.md_respa=False
               task.damino=True
 
+             box1=dock_box(task.myfile1)
+             box2=dock_box(task.myfile2)
+             task.boxx=(box1+box2)*1.2+20
+             task.boxy=(box1+box2)*1.2+20
+             task.boxz=(box1+box2)*1.2+20
 
-             task.ready=True
-             
-             
              task.save()
              return redirect('addmlist',task_id=task.id)
 
@@ -1090,7 +1133,7 @@ def refresh_done0(task):
          task.results_text=text
 
 
-         if task.md_pdbref and task.type=='remd' or task.type=='dock':
+         if task.md_pdbref and task.type=='remd' or task.type=='dock' and task.md_seq2 == '':
          
           for i in range(1,6):
            try:
@@ -1129,7 +1172,35 @@ def refresh_done0(task):
                      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' or task.type=='dock':