X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=django_simple%2Ftodo%2Fviews.py;h=e1ac2b0998a75b59d7d8733a620afa08b3e3588b;hb=521c866952798209eb432cc8f39434b04eeb56bf;hp=118de5213ba9508036ba1d7153018c4d54736da8;hpb=4e20166e24578902a411d288474a5079dfc981a2;p=django_unres.git diff --git a/django_simple/todo/views.py b/django_simple/todo/views.py index 118de52..e1ac2b0 100644 --- a/django_simple/todo/views.py +++ b/django_simple/todo/views.py @@ -30,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) @@ -289,6 +292,7 @@ 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 basename = str(task.owner) suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S") @@ -316,6 +320,7 @@ def add_md(request,task_id): if any(c.islower() for c in seq): task.md_respa=False + task.damino=True task.ready=True @@ -376,6 +381,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"] @@ -387,6 +393,7 @@ def add_md_a(request,task_id): 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"] @@ -447,9 +454,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 @@ -663,6 +672,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"] @@ -675,6 +685,7 @@ def add_remd_a(request,task_id): 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"] @@ -700,6 +711,146 @@ def add_remd_a(request,task_id): 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':'1L2Y','md_seed':-39912345} + 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.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"] + + 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_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"] + + 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: + seq,task.ssbond=from_pdb(task.myfile1) + else: + seq=seq_add_x(form.cleaned_data["md_seq"]) + for i in range(0,len(seq),40): + task.md_seq=task.md_seq+seq[i:i+40]+" " + + if task.md_start != "pdbstart": + task.ssbond='' + + task.md_seed=form.cleaned_data["md_seed"] + + task.md_nstep=form.cleaned_data["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_remd(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': @@ -753,6 +904,54 @@ 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 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) + 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) + 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) @@ -827,7 +1026,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: @@ -914,6 +1113,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=''