tutorial update and other changes
[django_unres.git] / django_simple / todo / views.py
index 8732703..33276ac 100644 (file)
@@ -6,6 +6,10 @@ from .models import Task
 import datetime
 import os
 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
@@ -17,16 +21,75 @@ res_codes = [
                 ('HSD', 'H'),('HSE', 'H'),('HSP', 'H'),
                 ('HIE', 'H'), ('HID', 'H'),('HIP', 'H'),
                 ('CYX', 'C'),
+                ('DCY', 'c'), ('DAS', 'd'), ('DSN', 's'), ('DGN', 'q'),
+                ('DLY', 'k'), ('DIL', 'i'), ('DPR', 'p'), ('DTH', 't'),
+                ('DPN', 'f'), ('DSG', 'n'), ('DHI', 'h'),
+                ('DLE', 'l'), ('DAR', 'r'), ('DTR', 'w'), ('DAL', 'a'),
+                ('DVA', 'v'), ('DGL', 'e'), ('DTY', 'y'), ('MED', 'm'),                
                ]
 
 three_to_one = dict(res_codes)
 
+def load_pdbid(pdbid,dirname):
+    os.mkdir(dirname)
+    if len(pdbid)==4:
+       file,header=urllib.urlretrieve('http://files.rcsb.org/download/'+pdbid+'.pdb',
+                     dirname+'/plik.pdb')     
+    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:
+        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)
+       pdb_tmp.close()
+       file=dirname+'/plik.pdb'
+       
+    return(file)
+
+
+def seq_2d_from_pdb(seq_2d,seq):
+    if seq_2d =='':
+      return(seq_2d)
+    seq_2d=seq_2d.replace('C', '-')
+    seq_2d_tmp=''
+    ii=0
+    for i in range(0,len(seq)):
+      if seq[i]=='X':
+         seq_2d_tmp=seq_2d_tmp+'-'
+      else:
+         if len(seq_2d)>ii:
+            seq_2d_tmp=seq_2d_tmp+seq_2d[ii]
+            ii+=1
+    tmp=''
+    for i in range(0,len(seq_2d_tmp),40):
+      tmp=tmp+seq_2d_tmp[i:i+40]+" "
+    return(tmp)
+
+def seq_2d_add_x(seq_2d,seq,seq_form):
+    if seq_2d =='':
+      return(seq_2d)
+    seq_2d=seq_2d[:len(seq_form)]
+    seq_2d=seq_2d.replace('C', '-')
+    if seq_form[0] !='X' and seq[0] == 'X':
+      seq_2d='-'+seq_2d
+    if seq_form[-1] !='X' and seq[-1] == 'X':
+      seq_2d=seq_2d+'-'
+    seq_2d=seq_2d[:len(seq)]
+    tmp=''
+    for i in range(0,len(seq_2d),40):
+      tmp=tmp+seq_2d[i:i+40]+" "
+    return(tmp)
+
 def seq_add_x(sequence):
-    if sequence[0] != 'G':
+    if sequence[0] != 'G' and sequence[0] != 'g' and sequence[0] != 'X':
         sequence='X'+sequence
-    if sequence[-1] != 'G':
+    if sequence[-1] != 'G' and sequence[-1] != 'g' and sequence[-1] != 'X':
         sequence=sequence+'X'
-    set ='CDSQKIPTFNGHLRWAVEYMX'
+    set ='CDSQKIPTFNGHLRWAVEYMXcdsqkiptfnhlrwaveym'
     sequence = ''.join([c for c in sequence if c in set])
 
     return(sequence)    
@@ -34,20 +97,43 @@ def seq_add_x(sequence):
 def from_pdb(file):
     sequence = []
     ssbond = []
+    ssbond_ch = []
+    ires = []
+    chain_start = {}
+    chain_end = {}
+    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])
-              sequence.append(aa)
-            if line[0:3] == 'TER':
+              i = int(line[22:26])
+              ch = line[21:22]
+              if newchain or i!=ires[-1]:
+                sequence.append(aa)
+                ires.append(i)
+                if newchain:
+                 chain_start[ch]=i
+                 chain_sorted.extend(ch)
+                 newchain = False
+            if line[0:3] == 'TER' and i != '':
               sequence.append('XX')
+              chain_end[ch]=i
+              newchain = True
             if line[0:6] == 'SSBOND':
               b=[]
               b.append(int(line[17:21]))
               b.append(int(line[31:35]))
               ssbond.append(b)
-                                                                                    
+              c = []
+              c.append((line[15:16]))
+              c.append((line[29:30]))
+              ssbond_ch.append(c)                                                                      
             if line[0:3] == 'END':
               break
+    if not sequence[-1] == 'XX':
+            chain_end[ch]=i
     while sequence[-1] == 'XX':
             del sequence[-1]
     if sequence[0] != 'G':
@@ -56,16 +142,24 @@ def from_pdb(file):
     if sequence[-1] != 'G':
             sequence.append('X')
     seq=''.join(sequence)
-    return seq,ssbond
+#    if ires[0] != 1:
+#            ssbond=[ [e[0]-ires[0]+1,e[1]-ires[0]+1] for e in ssbond]
+    i=0
+    for c in chain_sorted:
+      unres_shift[c]=i+chain_start[c]
+      i=i-(chain_end[c]-chain_start[c])-3
+    ssbond=[ [e[0]-unres_shift[c[0]]+1,e[1]-unres_shift[c[1]]+1] for e,c in zip(ssbond,ssbond_ch)]     
+
+    return seq,json.dumps(ssbond)
 
 
 @login_required
 def index(request):
     user = request.user
-    tasks = Task.objects.filter(owner=user)
+    tasks = Task.objects.filter(owner=user).order_by('-created_date')
     variable = ''
     return render(request, "index.html", {
-            'tasks': tasks
+            'tasks': tasks, 'alldone': 0
         })
 
 @login_required
@@ -80,16 +174,29 @@ def add(request):
             return redirect('add_min',task_id=task.id)
     return redirect('/')
 
-
 @login_required
 def add_min(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':'1BDD'}
+        form = TaskForm_min(initial=data)     
+     else:
         form = TaskForm_min(request.POST,request.FILES)
         if form.is_valid():
              task.name=form.cleaned_data["name"]
              task.type="min"
-             task.myfile1=form.cleaned_data["file1"]
+             pdbid=form.cleaned_data["pdbid"]
+
+             basename = str(task.owner)
+             suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
+             task.jobdirname = "_".join([basename, suffix])
+
+             if pdbid:
+              task.myfile1=load_pdbid(pdbid,task.jobdirname)
+              task.pdbcode=pdbid
+             else:
+              task.myfile1=form.cleaned_data["file1"]
 
              seq,task.ssbond=from_pdb(task.myfile1)
              task.md_seq=""
@@ -97,12 +204,12 @@ def add_min(request,task_id):
                     task.md_seq=task.md_seq+seq[i:i+40]+" "
 
              task.ready=True
-             basename = str(task.owner)
-             suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
-             task.jobdirname = "_".join([basename, suffix])
              
              task.save()
-             return redirect('/')
+             if is_lazy_user(request.user):
+              return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')              
+             else:
+              return redirect('/')
     else:
         data= {'name':task.name}
         form = TaskForm_min(initial=data)
@@ -110,35 +217,54 @@ def add_min(request,task_id):
     basic_adv=True    
     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
 
+@login_required
 def add_min_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':'1EI0','unres_ff':'opt-wtfsa-2'}
+        form = TaskForm_min_a(initial=data)     
+     else:
         form = TaskForm_min_a(request.POST,request.FILES)
         if form.is_valid():
              task.name=form.cleaned_data["name"]
              task.type="min"
-             task.min_choice=form.cleaned_data["min_choice"]
+#             task.min_choice=form.cleaned_data["min_choice"]
              task.min_overlap=form.cleaned_data["min_overlap"]
              task.min_searchsc=form.cleaned_data["min_searchsc"]
              task.min_maxmin=form.cleaned_data["min_maxmin"]
              task.min_maxfun=form.cleaned_data["min_maxfun"]
              task.min_pdbout=form.cleaned_data["min_pdbout"]
-             task.myfile1=form.cleaned_data["file1"]
+
+             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"]
+
              task.min_unres_pdb=form.cleaned_data["min_unres_pdb"]
+             task.unres_ff=form.cleaned_data["unres_ff"]
+             task.boxx=form.cleaned_data["boxx"]
+             task.boxy=form.cleaned_data["boxy"]             
+             task.boxz=form.cleaned_data["boxz"]             
 
              seq,task.ssbond=from_pdb(task.myfile1)
              task.md_seq=""
              for i in range(0,len(seq),40):
                 task.md_seq=task.md_seq+seq[i:i+40]+" "
                                                            
-
              task.ready=True
-             basename = str(task.owner)
-             suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
-             task.jobdirname = "_".join([basename, suffix])
              
              task.save()
-             return redirect('/')
+             if is_lazy_user(request.user):
+              return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')             
+             else:
+              return redirect('/')
     else:
         data= {'name':task.name}
         form = TaskForm_min_a(initial=data)
@@ -150,6 +276,11 @@ def add_min_a(request,task_id):
 def add_md(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':'1IGD','md_start':'pdbstart',
+        'md_pdbref':True,'md_temp':200,'md_seed':-39912345}
+        form = TaskForm_md(initial=data)     
+     else:
         form = TaskForm_md(request.POST,request.FILES)
         if form.is_valid():
              task.name=form.cleaned_data["name"]
@@ -158,8 +289,17 @@ 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.myfile1=form.cleaned_data["file1"]
+
+             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"]
              task.md_pdbref=form.cleaned_data["md_pdbref"]             
 
              task.md_seq=""
@@ -175,36 +315,54 @@ def add_md(request,task_id):
                 task.ssbond=''
 
              task.ready=True
-             basename = str(task.owner)
-             suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
-             task.jobdirname = "_".join([basename, suffix])
              
              task.save()
-             return redirect('/')
+             if is_lazy_user(request.user):
+              return redirect('/details1/'+str(task.owner)+'/'+str(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'
     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
 
+@login_required
 def add_md_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_start':'extconf',
+         'md_pdbref':True,'md_mdpdb':True,'md_seed':-39912345}
+        form = TaskForm_md_a(initial=data)     
+     else:
         form = TaskForm_md_a(request.POST,request.FILES)
         if form.is_valid():
              task.name=form.cleaned_data["name"]
              task.type="md"
 
-             task.myfile1=form.cleaned_data["file1"]
+             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"]
              task.md_start=form.cleaned_data["md_start"]
              task.md_pdbref=form.cleaned_data["md_pdbref"]             
 
              task.md_seq=""
              if task.md_start == "pdbstart" or task.md_pdbref:
                seq,task.ssbond=from_pdb(task.myfile1)
+               task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
              else:
                seq=seq_add_x(form.cleaned_data["md_seq"])
+               task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])               
+
              for i in range(0,len(seq),40):
                 task.md_seq=task.md_seq+seq[i:i+40]+" "
 
@@ -222,17 +380,22 @@ def add_md_a(request,task_id):
              task.md_tau=form.cleaned_data["md_tau"]
              task.md_scal_fric=form.cleaned_data["md_scal_fric"]
              task.md_mdpdb=form.cleaned_data["md_mdpdb"]
+             task.unres_ff=form.cleaned_data["unres_ff"]
+             task.md_respa=form.cleaned_data["md_respa"]             
+             task.boxx=form.cleaned_data["boxx"]
+             task.boxy=form.cleaned_data["boxy"]             
+             task.boxz=form.cleaned_data["boxz"]             
 
              
              task.ready=True
-             basename = str(task.owner)
-             suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
-             task.jobdirname = "_".join([basename, suffix])
              
              task.save()
-             return redirect('/')
+             if is_lazy_user(request.user):
+              return redirect('/details1/'+str(task.owner)+'/'+str(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'
@@ -242,13 +405,28 @@ def add_md_a(request,task_id):
 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,'md_seed':-39912345}
+        form = TaskForm_remd(initial=data)     
+     else:
         form = TaskForm_remd(request.POST,request.FILES)
         if form.is_valid():
              task.name=form.cleaned_data["name"]
              task.type="remd"
              task.md_start=form.cleaned_data["md_start"]
-             task.myfile1=form.cleaned_data["file1"]
+
+             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"]
              task.md_pdbref=form.cleaned_data["md_pdbref"]
+             task.md_ntwx=task.remd_nstex 
 
              task.md_seq=""
              if task.md_start == "pdbstart" or task.md_pdbref:
@@ -268,36 +446,207 @@ def add_remd(request,task_id):
 
              task.ready=True
              
-             basename = str(task.owner)
-             suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
-             task.jobdirname = "_".join([basename, suffix])
              
              task.save()
-             return redirect('/')
+             if is_lazy_user(request.user):
+              return redirect('/details1/'+str(task.owner)+'/'+str(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'
     return render(request, 'edit.html', {'form': form, 'task':task, 'basic_adv':basic_adv, 'p_type':p_type})
 
+@login_required
 def add_remd_a(request,task_id):
+    from django.core.files.uploadedfile import UploadedFile
     task = get_object_or_404(Task, id=task_id)
     if request.method == 'POST':
+     if '_example' in request.POST:
+        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_seed':-39912345,
+         'remd_cluter_temp':270, 
+         'scal_rad':4.0,'wsaxs':100.0,'saxs_data':
+""" 0.5     1.33868e-02
+ 1.5     1.95880e-02
+ 2.5     2.68896e-02
+ 3.5     3.43737e-02
+ 4.5     4.07099e-02
+ 5.5     4.47875e-02
+ 6.5     4.63486e-02
+ 7.5     4.60514e-02
+ 8.5     4.49130e-02
+ 9.5     4.36744e-02
+10.5     4.26085e-02
+11.5     4.17464e-02
+12.5     4.11217e-02
+13.5     4.07835e-02
+14.5     4.06776e-02
+15.5     4.06060e-02
+16.5     4.03241e-02
+17.5     3.96655e-02
+18.5     3.85756e-02
+19.5     3.70537e-02
+20.5     3.50982e-02
+21.5     3.27236e-02
+22.5     3.00046e-02
+23.5     2.70643e-02
+24.5     2.40044e-02
+25.5     2.08595e-02
+26.5     1.76342e-02
+27.5     1.43802e-02
+28.5     1.12281e-02
+29.5     8.34574e-03
+30.5     5.87354e-03
+31.5     3.88732e-03
+32.5     2.39755e-03
+33.5     1.36323e-03
+34.5     7.06686e-04
+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():
              task.name=form.cleaned_data["name"]
              task.type="remd"
 
-             task.myfile1=form.cleaned_data["file1"]
+             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"]
              task.md_start=form.cleaned_data["md_start"]  
              task.md_pdbref=form.cleaned_data["md_pdbref"]                        
 
              task.md_seq=""
              if task.md_start == "pdbstart" or task.md_pdbref:
                seq,task.ssbond=from_pdb(task.myfile1)
+               task.md_2d=seq_2d_from_pdb(form.cleaned_data["md_2d"],seq)
              else:
                seq=seq_add_x(form.cleaned_data["md_seq"])
+               task.md_2d=seq_2d_add_x(form.cleaned_data["md_2d"],seq,form.cleaned_data["md_seq"])               
+
              for i in range(0,len(seq),40):
                 task.md_seq=task.md_seq+seq[i:i+40]+" "
 
@@ -310,27 +659,36 @@ def add_remd_a(request,task_id):
              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"]
 #             task.remd_traj1file=form.cleaned_data["remd_traj1file"]
 #             task.remd_rest1file=form.cleaned_data["remd_rest1file"]
 
+             task.boxx=form.cleaned_data["boxx"]
+             task.boxy=form.cleaned_data["boxy"]             
+             task.boxz=form.cleaned_data["boxz"]             
+
              task.remd_cluter_temp=form.cleaned_data["remd_cluter_temp"]
+             task.unres_ff=form.cleaned_data["unres_ff"]
              
-             basename = str(task.owner)
-             suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
-             task.jobdirname = "_".join([basename, suffix])
+             task.scal_rad = form.cleaned_data["scal_rad"]
+             task.saxs_data = form.cleaned_data["saxs_data"]
+             task.wsaxs = form.cleaned_data["wsaxs"]
              
              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 addmlist(request,task_id):
     task = get_object_or_404(Task, id=task_id)
     if request.method == 'POST':
@@ -341,14 +699,31 @@ def addmlist(request,task_id):
              task.ready=True
              
              task.save()
-             return redirect('/')
+             if is_lazy_user(request.user):
+              return redirect('/details1/'+str(task.owner)+'/'+str(task.id)+'/')              
+             else:
+              return redirect('/')
     else:
+      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':
         '["270", "280", "290", "300", "310", "320", "330", "345"]'
         }
-        form = TaskForm_list(task.remd_nrep,initial=data)
+      else: 
+        data= {'name':task.name,'nrep':task.remd_nrep,'multiplexing':
+        '["1", "1", "1", "1", "1", "1", "1", "1"]',
+        'temperatures':
+        '["250", "260", "270", "280", "290", "300", "315", "330"]'
+        }
+      
+      form = TaskForm_list(task.remd_nrep,initial=data)
     p_type='replica exchange molecular dynamics - advanced options'
     return render(request, 'edit_lista.html', {'form': form, 'task':task, 'p_type':p_type})
 
@@ -357,16 +732,68 @@ def details(request,task_id):
     task = get_object_or_404(Task, id=task_id)
     return render(request, "details.html",{'task':task})
 
+
+def details1(request,user_id,task_id):
+    task = get_object_or_404(Task, id=task_id)
+    return render(request, "details1.html",{'task':task})
+
+
 @login_required
 def delete(request, task_id):
     Task.objects.get(id=task_id).delete()
     return redirect('/')
 
+def refresh_done1(request, task_id):
+    task = get_object_or_404(Task, id=task_id)
+    user = task.owner
+    refresh_done0(task)
+
+    proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
+    njob=0
+    nq=0
+    for line in proc.stdout:
+      if 'piasek4' in line:
+        if line.split()[1]=='test_server':
+          njob+=1
+          if line.split()[-2]=='Q':
+            nq+=1
+    variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
+
+    return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
+
+
 @login_required
 def refresh_done(request):
     user = request.user
-    tasks = Task.objects.filter(owner=user)
+    tasks = Task.objects.filter(owner=user).order_by('-created_date')
+    alldone = 1
     for task in tasks:
+      refresh_done0(task)
+      if not task.done:
+         alldone=0
+
+    proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
+    njob=0
+    nq=0
+    for line in proc.stdout:
+      if 'piasek4' in line:
+        if line.split()[1]=='test_server':
+          njob+=1
+          if line.split()[-2]=='Q':
+            nq+=1
+    variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
+
+    if is_lazy_user(request.user):
+     return redirect('/details1/'+str(user)+'/'+str(task.id)+'/')
+    else:
+     return render(request, "index.html", {
+                'tasks': tasks ,
+                'variable' : variable,
+                'alldone': alldone
+                        })
+
+      
+def refresh_done0(task):
       if os.path.isfile(task.jobdirname+'/finished') and not task.done:
          task.done=True
 
@@ -391,15 +818,15 @@ def refresh_done(request):
                   
            elif task.type=='remd':
              j=0
-             text="Acceptance for replica exchanges\n"
+             text="Acceptance for replica exchanges and number of exchange attempts\n"
              for line in f:
                         
                if 'ACC' in line:
                     j+=1
-                    text=text+line
+                    text=text+' '.join(line.split()[2:])+"\n"
                     if j==task.remd_nrep:
                        j=1
-                       text="Acceptance for replica exchanges\n"+line
+                       text="Acceptance for replica exchanges and number of exchange attempts\n"+' '.join(line.split()[2:])+"\n"
 
                if 'Total wall' in line:
                   text=text+line
@@ -410,21 +837,47 @@ def refresh_done(request):
          if task.md_pdbref and task.type=='remd':
          
           for i in range(1,6):
+           try:
             with open(task.jobdirname+'/file_wham_T'+str(int(task.remd_cluter_temp))+'K_000'+str(i)+'.pdb', 'r') as f:
                  line=f.readline()
                  if i==1:
-                     task.remd_model1=' '.join(line.split()[-6:])
+                     task.remd_model1='Cluster1 '+' '.join(line.split()[-3:])
                  elif i==2:
-                     task.remd_model2=' '.join(line.split()[-6:])
+                     task.remd_model2='Cluster2 '+' '.join(line.split()[-3:])
                  elif i==3:
-                     task.remd_model3=' '.join(line.split()[-6:])
+                     task.remd_model3='Cluster3 '+' '.join(line.split()[-3:])
                  elif i==4:
-                     task.remd_model4=' '.join(line.split()[-6:])
+                     task.remd_model4='Cluster4 '+' '.join(line.split()[-3:])
                  elif i==5:
-                     task.remd_model5=' '.join(line.split()[-6:])
+                     task.remd_model5='Cluster5 '+' '.join(line.split()[-3:])
+           except EnvironmentError:
+            print 'file_wham_T*pdb open error'
+          for i in range(1,6):
+            with open(task.jobdirname+'/tmscore'+str(i)+'.out', 'r') as f:
+               text=''
+               for line in f:
+                 if 'RMSD of  the common residues=' in line:
+                   text=' RMSD='+line.split()[5]
+                 if 'TM-score    =' in line:
+                   text=text+' TMscore='+line.split()[2]
+                 if 'GDT-TS-score=' in line:
+                   text=text+' GDT_TS='+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':  
-          with open('file_cluster_clust.out_000', 'r') as f:
+          with open(task.jobdirname+'/file_cluster_clust.out_000', 'r') as f:
 
            for line in f:
              if 'sumprob' in line:
@@ -434,15 +887,15 @@ def refresh_done(request):
                   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]
                      
          
 
@@ -464,20 +917,5 @@ def refresh_done(request):
              task.running=100
          task.save()
 
-    proc = subprocess.Popen('/opt/torque/bin/qstat', stdout=subprocess.PIPE)
-    njob=0
-    nq=0
-    for line in proc.stdout:
-      if 'piasek4' in line:
-        if line.split()[1]=='test_server':
-          njob+=1
-          if line.split()[-2]=='Q':
-            nq+=1
-    variable='Idle jobs='+str(nq)+' Total jobs='+str(njob)
-
-    return render(request, "index.html", {
-                'tasks': tasks ,
-                'variable' : variable
-                        })
     
-#   return redirect('/')        
+      return