NEWCT-9P force field
[django_unres.git] / django_simple / todo / views.py
index 8ad5060..092b9bd 100644 (file)
@@ -161,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
@@ -292,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")
@@ -380,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"]
@@ -452,6 +457,7 @@ 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
@@ -669,6 +675,7 @@ 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"]
@@ -900,6 +907,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)
@@ -924,6 +992,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)
@@ -947,7 +1016,8 @@ def refresh_done(request):
      return render(request, "index.html", {
                 'tasks': tasks ,
                 'variable' : variable,
-                'alldone': alldone
+                'alldone': alldone,
+                'tasks_count':tasks_count
                         })
 
       
@@ -1045,15 +1115,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]
                      
          
 
@@ -1091,3 +1161,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