dock DockQ update 2
[django_unres.git] / django_simple / todo / views.py
index 7045a7c..2c0f5b3 100644 (file)
@@ -9,6 +9,7 @@ import subprocess
 import json
 from lazysignup.decorators import allow_lazy_user
 from lazysignup.utils import is_lazy_user
+import random
 
 res_codes = [
                 # 20 canonical amino acids
@@ -29,23 +30,26 @@ res_codes = [
 
 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)
 
@@ -103,7 +107,7 @@ def from_pdb(file):
     unres_shift = {}
     chain_sorted=[]
     newchain = True
-    
+    i=''
     for line in file:
             if line[0:6] == 'ATOM  ' and line[13:15] == 'CA':
               aa = three_to_one.get(line[17:20])
@@ -116,7 +120,7 @@ def from_pdb(file):
                  chain_start[ch]=i
                  chain_sorted.extend(ch)
                  newchain = False
-            if line[0:3] == 'TER':
+            if line[0:3] == 'TER' and i != '':
               sequence.append('XX')
               chain_end[ch]=i
               newchain = True
@@ -157,8 +161,9 @@ def index(request):
     user = request.user
     tasks = Task.objects.filter(owner=user).order_by('-created_date')
     variable = ''
+    tasks_count = Task.objects.filter(owner=user).count()
     return render(request, "index.html", {
-            'tasks': tasks, 'alldone': 0
+            'tasks': tasks, 'alldone': 0, 'tasks_count':tasks_count
         })
 
 @login_required
@@ -277,7 +282,7 @@ def add_md(request,task_id):
     if request.method == 'POST':
      if '_example' in request.POST:
         data= {'name':task.name,'pdbid':'1IGD','md_start':'pdbstart',
-        'md_pdbref':True,'md_temp':200}
+        'md_pdbref':True,'md_temp':200,'md_seed':-39912345}
         form = TaskForm_md(initial=data)     
      else:
         form = TaskForm_md(request.POST,request.FILES)
@@ -288,6 +293,9 @@ def add_md(request,task_id):
              task.md_start=form.cleaned_data["md_start"]
              task.md_temp=form.cleaned_data["md_temp"]
              task.md_nstep=form.cleaned_data["md_nstep"]
+             task.md_total_steps=task.md_nstep
+             if task.md_nstep<250000:
+                 task.md_ntwx=100
 
              basename = str(task.owner)
              suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
@@ -313,6 +321,10 @@ def add_md(request,task_id):
              if task.md_start != "pdbstart":
                 task.ssbond=''
 
+             if any(c.islower() for c in seq):
+              task.md_respa=False
+              task.damino=True
+
              task.ready=True
              
              task.save()
@@ -321,7 +333,7 @@ def add_md(request,task_id):
              else:
               return redirect('/')
     else:
-        data= {'name':task.name}
+        data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
         form = TaskForm_md(initial=data)
     basic_adv=True
     p_type='molecular dynamics'
@@ -333,7 +345,7 @@ def add_md_a(request,task_id):
     if request.method == 'POST':
      if '_example' in request.POST:
         data= {'name':task.name,'pdbid':'1L2Y','md_start':'extconf',
-         'md_pdbref':True,'md_mdpdb':True}
+         'md_pdbref':True,'md_mdpdb':True,'md_seed':-39912345}
         form = TaskForm_md_a(initial=data)     
      else:
         form = TaskForm_md_a(request.POST,request.FILES)
@@ -372,6 +384,7 @@ def add_md_a(request,task_id):
 
              task.md_temp=form.cleaned_data["md_temp"]
              task.md_nstep=form.cleaned_data["md_nstep"]
+             task.md_total_steps=task.md_nstep
              task.md_ntwe=form.cleaned_data["md_ntwe"]
              task.md_ntwx=form.cleaned_data["md_ntwx"]
              task.md_dt=form.cleaned_data["md_dt"]
@@ -381,6 +394,9 @@ def add_md_a(request,task_id):
              task.md_mdpdb=form.cleaned_data["md_mdpdb"]
              task.unres_ff=form.cleaned_data["unres_ff"]
              task.md_respa=form.cleaned_data["md_respa"]             
+             if any(c.islower() for c in seq):
+              task.md_respa=False
+              task.damino=True
              task.boxx=form.cleaned_data["boxx"]
              task.boxy=form.cleaned_data["boxy"]             
              task.boxz=form.cleaned_data["boxz"]             
@@ -394,7 +410,7 @@ def add_md_a(request,task_id):
              else:
               return redirect('/')
     else:
-        data= {'name':task.name}
+        data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
         form = TaskForm_md_a(initial=data)
     basic_adv=False
     p_type='molecular dynamics - advanced options'
@@ -405,7 +421,7 @@ def add_remd(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}
+        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)
@@ -441,6 +457,11 @@ def add_remd(request,task_id):
              task.md_seed=form.cleaned_data["md_seed"]
 
              task.md_nstep=form.cleaned_data["md_nstep"]
+             task.md_total_steps=task.md_nstep
+
+             if any(c.islower() for c in seq):
+              task.md_respa=False
+              task.damino=True
 
 
              task.ready=True
@@ -452,7 +473,7 @@ def add_remd(request,task_id):
              else:
               return redirect('/')
     else:
-        data= {'name':task.name}
+        data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
         form = TaskForm_remd(initial=data)
     basic_adv=True
     p_type='replica exchange molecular dynamics'
@@ -464,13 +485,15 @@ def add_remd_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':'1E0G','md_pdbref':True,
-         'md_nstep':500000,'md_lang':'berendsen','unres_ff':'opt-wtfsa-2',
-         'remd_cluter_temp':280}
-        form = TaskForm_remd_a(initial=data)     
+        data= {'name':task.name,'pdbid':'5G3Q:B','md_pdbref':True,
+         'md_nstep':2000000,'md_lang':'berendsen','unres_ff':'FF2','md_seed':-39912345,
+         'remd_cluter_temp':290,'md_2d':'--EEEEEEE------EEEEEE------EEEEEE------HHHHHHHHHHH---HHHHHHHHHHHHHHHHHHHHHHH---'}
+        form = TaskForm_remd_a(initial=data)    
+        task.example='casp12'
+        task.save() 
      elif '_example_saxs' in request.POST:
         data= {'name':task.name,'pdbid':'5UJQ','md_pdbref':True,
-         'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2',
+         'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
          'remd_cluter_temp':270, 
          'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
 """ 0.5     1.33868e-02
@@ -511,6 +534,112 @@ def add_remd_a(request,task_id):
 35.5     3.30592e-04
 36.5     1.38359e-04"""}
         form = TaskForm_remd_a(initial=data)     
+     elif '_example_saxs1' in request.POST:
+        data= {'name':task.name,'pdbid':'2KMS','md_pdbref':True,'md_start':'pdbstart',
+        'md_2d':'----EEEEEE-EEEEE-------EEEEEEEEE--EEEEEE-EEEE---EEEEEEEEE-----EEEEEEE-EEE-HHHHH-EEEE-EEEEEEEEE----EEEEEE---EEE-----',
+         'md_nstep':200000,'md_lang':'langevin','unres_ff':'FF2','md_seed':-39912345,
+         'remd_cluter_temp':280, 'min_maxfun':50,
+         'scal_rad':5.0,'wsaxs':1000.0,'saxs_data':
+"""0.7100E-00 0.2036E-03
+0.1420E+01 0.4221E-03
+0.2130E+01 0.6548E-03
+0.2840E+01 0.9001E-03
+0.3550E+01 0.1156E-02
+0.4260E+01 0.1421E-02
+0.4970E+01 0.1692E-02
+0.5680E+01 0.1965E-02
+0.6390E+01 0.2239E-02
+0.7100E+01 0.2509E-02
+0.7810E+01 0.2772E-02
+0.8520E+01 0.3025E-02
+0.9230E+01 0.3265E-02
+0.9940E+01 0.3489E-02
+0.1065E+02 0.3694E-02
+0.1136E+02 0.3878E-02
+0.1207E+02 0.4039E-02
+0.1278E+02 0.4177E-02
+0.1349E+02 0.4289E-02
+0.1420E+02 0.4377E-02
+0.1491E+02 0.4439E-02
+0.1562E+02 0.4478E-02
+0.1633E+02 0.4493E-02
+0.1704E+02 0.4487E-02
+0.1775E+02 0.4461E-02
+0.1846E+02 0.4418E-02
+0.1917E+02 0.4361E-02
+0.1988E+02 0.4291E-02
+0.2059E+02 0.4211E-02
+0.2130E+02 0.4125E-02
+0.2201E+02 0.4034E-02
+0.2272E+02 0.3942E-02
+0.2343E+02 0.3850E-02
+0.2414E+02 0.3761E-02
+0.2485E+02 0.3677E-02
+0.2556E+02 0.3598E-02
+0.2627E+02 0.3526E-02
+0.2698E+02 0.3462E-02
+0.2769E+02 0.3405E-02
+0.2840E+02 0.3356E-02
+0.2911E+02 0.3315E-02
+0.2982E+02 0.3280E-02
+0.3053E+02 0.3251E-02
+0.3124E+02 0.3226E-02
+0.3195E+02 0.3205E-02
+0.3266E+02 0.3186E-02
+0.3337E+02 0.3167E-02
+0.3408E+02 0.3147E-02
+0.3479E+02 0.3125E-02
+0.3550E+02 0.3099E-02
+0.3621E+02 0.3068E-02
+0.3692E+02 0.3031E-02
+0.3763E+02 0.2987E-02
+0.3834E+02 0.2937E-02
+0.3905E+02 0.2878E-02
+0.3976E+02 0.2812E-02
+0.4047E+02 0.2739E-02
+0.4118E+02 0.2658E-02
+0.4189E+02 0.2571E-02
+0.4260E+02 0.2478E-02
+0.4331E+02 0.2381E-02
+0.4402E+02 0.2279E-02
+0.4473E+02 0.2174E-02
+0.4544E+02 0.2068E-02
+0.4615E+02 0.1960E-02
+0.4686E+02 0.1853E-02
+0.4757E+02 0.1748E-02
+0.4828E+02 0.1644E-02
+0.4899E+02 0.1544E-02
+0.4970E+02 0.1447E-02
+0.5041E+02 0.1355E-02
+0.5112E+02 0.1267E-02
+0.5183E+02 0.1184E-02
+0.5254E+02 0.1106E-02
+0.5325E+02 0.1033E-02
+0.5396E+02 0.9646E-03
+0.5467E+02 0.9008E-03
+0.5538E+02 0.8411E-03
+0.5609E+02 0.7852E-03
+0.5680E+02 0.7327E-03
+0.5751E+02 0.6831E-03
+0.5822E+02 0.6360E-03
+0.5893E+02 0.5909E-03
+0.5964E+02 0.5475E-03
+0.6035E+02 0.5055E-03
+0.6106E+02 0.4646E-03
+0.6177E+02 0.4245E-03
+0.6248E+02 0.3853E-03
+0.6319E+02 0.3467E-03
+0.6390E+02 0.3089E-03
+0.6461E+02 0.2719E-03
+0.6532E+02 0.2357E-03
+0.6603E+02 0.2007E-03
+0.6674E+02 0.1669E-03
+0.6745E+02 0.1345E-03
+0.6816E+02 0.1038E-03
+0.6887E+02 0.7482E-04
+0.6958E+02 0.4782E-04
+0.7029E+02 0.2286E-04"""}
+        form = TaskForm_remd_a(initial=data)     
      else:
         form = TaskForm_remd_a(request.POST,request.FILES)
         if form.is_valid():
@@ -546,15 +675,21 @@ def add_remd_a(request,task_id):
 
              task.md_seed=form.cleaned_data["md_seed"]
              task.md_nstep=form.cleaned_data["md_nstep"]
+             task.md_total_steps=task.md_nstep
              task.md_dt=form.cleaned_data["md_dt"]
              task.md_lang=form.cleaned_data["md_lang"]
              task.md_tau=form.cleaned_data["md_tau"]
              task.md_scal_fric=form.cleaned_data["md_scal_fric"]
+             task.min_maxfun=form.cleaned_data["min_maxfun"]
              task.remd_nrep=form.cleaned_data["remd_nrep"]
              task.remd_nstex=form.cleaned_data["remd_nstex"]
              task.md_ntwx=form.cleaned_data["md_ntwx"]             
              task.md_ntwe=form.cleaned_data["md_ntwe"]
              task.md_respa=form.cleaned_data["md_respa"]
+             if any(c.islower() for c in seq):
+              task.md_respa=False
+              task.damino=True
+             
 #             task.remd_traj1file=form.cleaned_data["remd_traj1file"]
 #             task.remd_rest1file=form.cleaned_data["remd_rest1file"]
 
@@ -572,13 +707,177 @@ def add_remd_a(request,task_id):
              task.save()
              return redirect('addmlist',task_id=task.id)
     else:
-        data= {'name':task.name}
+        data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
         form = TaskForm_remd_a(initial=data)
     basic_adv=False
     p_type='replica exchange molecular dynamics - advanced options'
     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':'1BON:A','pdbid2':'1BON:B','md_seed':-12396738,'md_nstep':500000}
+        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.remd_multi_m='["3", "3", "3", "3", "3", "3", "3", "3"]'
+             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"]
+             task.md_total_steps=task.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_dock_a(initial=data)     
+     else:
+        form = TaskForm_dock_a(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"]
+             task.md_total_steps=task.md_nstep
+             
+             task.md_dt=form.cleaned_data["md_dt"]
+             task.md_lang=form.cleaned_data["md_lang"]
+             task.md_tau=form.cleaned_data["md_tau"]
+             task.md_scal_fric=form.cleaned_data["md_scal_fric"]
+             task.min_maxfun=form.cleaned_data["min_maxfun"]
+             task.remd_nrep=form.cleaned_data["remd_nrep"]
+             task.remd_nstex=form.cleaned_data["remd_nstex"]
+             task.md_ntwx=form.cleaned_data["md_ntwx"]             
+             task.md_ntwe=form.cleaned_data["md_ntwe"]
+
+             task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
+             task.unres_ff=form.cleaned_data["unres_ff"]
+
+             if any(c.islower() for c in seq):
+              task.md_respa=False
+              task.damino=True
+
+             task.save()
+             return redirect('addmlist',task_id=task.id)
+
+    else:
+        data= {'name':task.name,'md_seed':-random.randint(10000000,99999999)}
+        form = TaskForm_dock_a(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':
@@ -594,7 +893,13 @@ def addmlist(request,task_id):
              else:
               return redirect('/')
     else:
-      if task.unres_ff == 'FF2':
+      if task.example == 'casp12':
+        data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
+        '["2", "2", "2", "2", "2", "2", "2", "2"]',
+        'temperatures':
+        '["270", "280", "290", "300", "310", "320", "330", "340"]'
+        }
+      elif task.unres_ff == 'FF2':
         data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
         '["1", "1", "1", "1", "1", "1", "1", "1"]',
         'temperatures':
@@ -626,6 +931,67 @@ def details1(request,user_id,task_id):
 def delete(request, task_id):
     Task.objects.get(id=task_id).delete()
     return redirect('/')
+    
+@login_required
+def restart(request, task_id):
+    task = get_object_or_404(Task, id=task_id)
+    restart0(task)
+    return redirect('/')
+   
+def add_restart_inp():
+    with open('file.inp','r') as f1, open ('file.inp.tmp','w') as f2:
+        for line in f1:
+          if 'reset_vel=' in line:
+            f2.write('{:79}'.format('restart'+line[7:]))
+          else:
+            f2.write(line)
+    os.remove('file.inp')
+    os.rename('file.inp.tmp','file.inp')
+    return 
+    
+def restart0(task):    
+    if os.path.isfile(task.jobdirname+'/finished'):    
+      os.remove(task.jobdirname+'/finished')
+    task.running =1
+    task.done=False
+    task.md_total_steps = task.md_total_steps+task.md_nstep
+    task.save()
+    if task.type == 'md':
+      os.chdir(task.jobdirname)
+      add_restart_inp()
+      ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)            
+      os.chdir('..')
+    elif task.type == 'remd':
+      os.chdir(task.jobdirname)
+      add_restart_inp()
+      tmp1=json.loads(task.remd_multi_m)
+      nreplicas=sum(map(int, tmp1))
+      with open('file_wham.inp','r') as f1, open ('file_wham.tmp','w') as f2:
+        for line in f1:
+          if 'rec_end=' in line:
+            rec=task.md_total_steps/task.md_ntwx
+            f2.write('nfile_cx=1 rec_start='+str(rec/10)
+               +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
+          elif 'isampl=' in line:
+            if task.md_total_steps/task.md_ntwx*nreplicas<=8000:
+                isampl=1
+            else:
+                isampl=int(task.md_total_steps/task.md_ntwx*nreplicas/8000)
+            f2.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
+          else:
+            f2.write(line)
+      os.remove('file_wham.inp')
+      os.rename('file_wham.tmp','file_wham.inp')
+      ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)            
+      os.chdir('..')
+    return
+
+def restart1(request, user_id, task_id):
+    task = get_object_or_404(Task, id=task_id)
+    user = task.owner
+    restart0(task)
+    return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
+    
 
 def refresh_done1(request, task_id):
     task = get_object_or_404(Task, id=task_id)
@@ -650,6 +1016,7 @@ def refresh_done1(request, task_id):
 def refresh_done(request):
     user = request.user
     tasks = Task.objects.filter(owner=user).order_by('-created_date')
+    tasks_count = Task.objects.filter(owner=user).count()
     alldone = 1
     for task in tasks:
       refresh_done0(task)
@@ -673,7 +1040,8 @@ def refresh_done(request):
      return render(request, "index.html", {
                 'tasks': tasks ,
                 'variable' : variable,
-                'alldone': alldone
+                'alldone': alldone,
+                'tasks_count':tasks_count
                         })
 
       
@@ -700,7 +1068,7 @@ def refresh_done0(task):
                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:
@@ -718,7 +1086,7 @@ def refresh_done0(task):
          task.results_text=text
 
 
-         if task.md_pdbref and task.type=='remd':
+         if task.md_pdbref and task.type=='remd' or task.type=='dock':
          
           for i in range(1,6):
            try:
@@ -757,10 +1125,38 @@ 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:
+                   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':  
+         if task.type=='remd' or task.type=='dock':  
           with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
 
            for line in f:
@@ -771,15 +1167,15 @@ def refresh_done0(task):
                   if i>6:
                        break
                   if i==1:
-                     task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[2]
+                     task.remd_model1=task.remd_model1+' Cluster1 probability= '+line1.split()[-2]
                   elif i==2:
-                     task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[2]
+                     task.remd_model2=task.remd_model2+' Cluster2 probability= '+line1.split()[-2]
                   elif i==3:
-                     task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[2]
+                     task.remd_model3=task.remd_model3+' Cluster3 probability= '+line1.split()[-2]
                   elif i==4:
-                     task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[2]
+                     task.remd_model4=task.remd_model4+' Cluster4 probability= '+line1.split()[-2]
                   elif i==5:
-                     task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[2]
+                     task.remd_model5=task.remd_model5+' Cluster5 probability= '+line1.split()[-2]
                      
          
 
@@ -787,6 +1183,20 @@ def refresh_done0(task):
       elif os.path.isfile(task.jobdirname+'/file_GB000.stat') and not task.done:
          if (task.type=='min'):
            task.running =1
+           with open(task.jobdirname+'/file.out_GB000', 'r') as f:
+              line=''
+              for line in f:
+                pass
+              if line != '':
+                last = line.split()[0]
+              else:
+                last = 0
+           try:
+              task.running=int(1+int(last)*100.0/task.min_maxmin)
+           except:
+              pass
+           if task.running>100:
+              task.running=100
          else:
            with open(task.jobdirname+'/file_GB000.stat', 'r') as f:
               line=''
@@ -803,3 +1213,24 @@ def refresh_done0(task):
 
     
       return  
+
+@login_required
+def zip_all_files(request, task_id):
+    import os, zipfile
+    from django.http import HttpResponse
+    from wsgiref.util import FileWrapper
+    from django.core.files.temp import NamedTemporaryFile
+
+    task = get_object_or_404(Task, id=task_id)
+
+    temp=NamedTemporaryFile()
+    archive = zipfile.ZipFile(temp, 'w', zipfile.ZIP_DEFLATED)
+    for (dirpath, dirnames, filenames) in os.walk(task.jobdirname):
+       for file1 in filenames:
+         archive.write(dirpath+"/"+file1,file1)
+    archive.close()
+    temp.seek(0)
+    wrapper = FileWrapper(temp)
+    response = HttpResponse(wrapper, content_type='application/zip')
+    response['Content-Disposition'] = 'attachment; filename=all.zip'
+    return response