3 from django.db.models.signals import post_save, post_delete
4 from django.dispatch import receiver
5 from .models import Task
10 from string import Template
14 logger = logging.getLogger(__name__)
16 def seq_2d_xx(line,seq):
17 line=line.replace(" ","")
19 for ii in range(0,len(line)):
25 return("".join(lista))
27 def seq_2d_write(line):
28 line=line.replace(" ", "")
29 out='{:d}\n{:6.1f}\n'.format(len(line),50.0)
31 out=out+'{:5d}{:8.3f}{:8.3f}\n'.format(i,0.0,180.0)
32 for ii in range(1,len(line)-2):
34 if line[ii:ii+2]=='HH':
35 out=out+'{:5d}{:8.3f}{:8.3f}\n'.format(i,50.0,20.0)
36 elif line[ii:ii+2]=='EE':
37 out=out+'{:5d}{:8.3f}{:8.3f}\n'.format(i,180.0,40.0)
39 out=out+'{:5d}{:8.3f}{:8.3f}\n'.format(i,0.0,180.0)
42 def seq_2d_write_50(line):
43 line=line.replace(" ", "")
44 out='{:d}\n'.format(len(line))
46 out=out+'{:5d}{:8.3f}{:8.3f}{:8.3f}\n'.format(i,0.0,180.0,50.0)
47 for ii in range(1,len(line)-2):
49 if line[ii:ii+2]=='HH':
50 out=out+'{:5d}{:8.3f}{:8.3f}{:8.3f}\n'.format(i,50.0,20.0,50.0)
51 elif line[ii:ii+2]=='EE':
52 out=out+'{:5d}{:8.3f}{:8.3f}{:8.3f}\n'.format(i,180.0,40.0,50.0)
54 out=out+'{:5d}{:8.3f}{:8.3f}{:8.3f}\n'.format(i,0.0,180.0,50.0)
57 def write_ssbond(ssbond):
60 ssbond=json.loads(ssbond)
64 list_sorted=sorted(list)
67 return str(len(list))+' '+' '.join(map(str,list_sorted))+'\n'+\
68 str(len(ssbond))+' '+' '.join(map(str,list))+'\n'
73 @receiver(post_save, sender=Task)
74 def write_on_task_save(sender, instance, **kwargs):
75 if instance.ready and not instance.done and instance.running==0 and instance.pbsjob=='':
76 if (not os.path.isdir(instance.jobdirname)):
77 os.mkdir(instance.jobdirname)
78 # os.chdir(instance.jobdirname)
82 #md=Template('nstep=$nstep ntwe=100 ntwx=100 dt=0.20 damax=10.0 lang=1'+
83 # 't_bath=300 reset_vel=0 respa ntime_split=1 maxtime_split=512 mdpdb')
84 #wrapper = textwrap.TextWrapper(width=70)
85 #word_list = wrapper.wrap(text=md.substitute(nstep=str(nstep)))
87 if instance.unres_ff =='FF2':
88 w="""WSC=1.00000 WSCP=1.23315 WELEC=0.84476 WBOND=1.00000 WANG=0.62954 &
89 WSCLOC=0.10554 WTOR=1.34316 WTORD=1.26571 WCORRH=0.19212 WCORR5=0.00000 &
90 WCORR6=0.00000 WEL_LOC=0.37357 WTURN3=1.40323 WTURN4=0.64673 WTURN6=0.00000 &
91 WVDWPP=0.23173 WHPB=1.00000 WSCCOR=0.25 &
92 CUTOFF=7.00000 WCORR4=0.00000"""
93 elif instance.unres_ff =='NEWCT-9P':
94 w="""WSC=0.81230 WSCP=1.20420 WELEC=0.87690 WBOND=1.00000 WANG=1.97730 &
95 WSCLOC=0.063657 WTOR=1.41540 WTORD=0.00000 WCORRH=0.00000 WCORR5=0.00000 &
96 WCORR6=0.00000 WEL_LOC=0.036638 WTURN3=1.45110 WTURN4=0.00000 WTURN6=0.00000 &
97 WSCCOR=0.00000 WVDWPP=0.33393 WHPB=1.00000 WSCP14=0.00000 &
98 CUTOFF=7.00000 WCORR4=0.00000"""
100 w="""WSC=0.82686 WSCP=0.96947 WELEC=0.79373 WBOND=1.00000 WANG=0.46542 &
101 WSCLOC=0.07969 WTOR=0.81684 WTORD=0.67806 WCORRH=0.00000 WCORR5=0.00000 &
102 WCORR6=0.00000 WEL_LOC=0.71100 WTURN3=2.30298 WTURN4=0.86517 WTURN6=0.00000 &
103 WSCCOR=0.14577 WVDWPP=0.17781 WHPB=1.00000 WSCP14=0.00000 &
104 CUTOFF=7.00000 WCORR4=0.00000"""
107 with open(instance.jobdirname+'/file.inp','w') as f:
108 f.write(instance.name + ' UNRES server job'+ '\n')
110 if instance.type == 'min' :
112 control_line = 'SEED='+str(instance.md_seed)+' ' \
113 + instance.min_choice \
114 + ' pdbstart pdbref ' \
115 + ' BOXX='+str(instance.boxx) \
116 + ' BOXY='+str(instance.boxy) \
117 + ' BOXZ='+str(instance.boxz) +' '
118 if not instance.min_overlap:
119 control_line = control_line+'overlap '
120 if not instance.min_searchsc:
121 control_line = control_line+'nosearchsc '
122 if instance.min_pdbout:
123 control_line = control_line+'pdbout '
124 if instance.min_unres_pdb:
125 control_line = control_line+'unres_pdb '
126 if instance.unres_ff =='NEWCT-9P':
127 control_line = control_line+'tormode=2 '
129 type_line = 'print_min_ini print_min_res print_min_stat'\
130 +' MAXMIN='+str(instance.min_maxmin)\
131 +' MAXFUN='+str(instance.min_maxfun)
134 seq=instance.md_seq.replace(" ","")
142 nogly ='CDSQKIPTFNHLRWAVEYMcdsqkiptfnhlrwaveym'
143 seq2 = ''.join([c for c in seq if c in nogly])
145 dimen3=(dimen3+len(seq2))*3
148 if instance.type == 'md' :
149 control_line = 'SEED='+str(instance.md_seed)+' '\
150 +instance.md_start +' md one_letter'\
151 + ' BOXX='+str(instance.boxx) \
152 + ' BOXY='+str(instance.boxy) \
153 + ' BOXZ='+str(instance.boxz) +' '
155 if instance.md_pdbref:
156 control_line = control_line+'pdbref '
160 control_line = control_line+' constr_dist=12 '
162 if instance.unres_ff =='NEWCT-9P':
163 control_line = control_line+'tormode=2 cart'
165 type_line = ' reset_vel=0'\
166 +' t_bath='+str(instance.md_temp)\
167 +' nstep='+str(instance.md_nstep)\
168 +' ntwe='+str(instance.md_ntwe)\
169 +' ntwx='+str(instance.md_ntwx)\
170 +' dt='+str(instance.md_dt)
171 if instance.md_lang == 'langevin':
172 type_line = type_line + ' lang=1 '
173 type_line = type_line + 'scal_fric='+str(instance.md_scal_fric)
174 if instance.md_lang == 'berendsen':
175 type_line = type_line + ' lang=0 tbf '
176 type_line = type_line + 'tau_bath='+str(instance.md_tau)
177 if instance.md_respa:
178 type_line = type_line + ' respa '
179 if instance.md_mdpdb:
180 type_line = type_line + ' mdpdb '
182 if instance.type == 'remd' or instance.type == 'dock':
183 control_line = 'SEED='+str(instance.md_seed)+' '\
184 +instance.md_start +' re one_letter'\
185 + ' BOXX='+str(instance.boxx) \
186 + ' BOXY='+str(instance.boxy) \
187 + ' BOXZ='+str(instance.boxz) +' '
189 if instance.type == 'dock':
190 control_line = control_line+'CONSTR_HOMOL=24 '
192 if instance.md_pdbref:
193 control_line = control_line+'pdbref '
195 if instance.unres_ff =='NEWCT-9P':
196 control_line = control_line+'tormode=2 cart'
199 control_line = control_line+' constr_dist=12 '
203 if instance.saxs_data != '':
204 lines=instance.saxs_data.split('\n')
207 if len(line.split())==2:
209 cntrl_saxs=' nsaxs='+str(nsaxs)+' scal_rad='+str(instance.scal_rad)
210 control_line += cntrl_saxs
212 type_line = ' reset_vel='+ str(instance.remd_nstex)\
213 +' nstep='+str(instance.md_nstep)\
214 +' ntwe='+str(instance.md_ntwe)\
215 +' ntwx='+str(instance.md_ntwx)\
216 +' dt='+str(instance.md_dt)
217 if instance.md_lang == 'langevin':
218 type_line = type_line + ' lang=1 '
219 type_line = type_line + 'scal_fric='+str(instance.md_scal_fric)
220 if instance.md_lang == 'berendsen':
221 type_line = type_line + ' lang=0 tbf '
222 type_line = type_line + 'tau_bath='+str(instance.md_tau)
223 if instance.md_respa:
224 type_line = type_line + ' respa '
225 # if instance.md_mdpdb:
226 # type_line = type_line + ' mdpdb '
228 type_line2 = 'nrep='+str(instance.remd_nrep) \
229 +' nstex='+str(instance.remd_nstex) \
230 +' tlist mlist sync nsyn='+str(instance.remd_nstex)\
231 +' traj1file rest1file TRAJCACHE=200'
233 if instance.md_start == 'pdbstart':
234 type_line = type_line + ' preminim cart'
236 wrapper = textwrap.TextWrapper(width=70)
238 word_list = wrapper.wrap(text=control_line)
239 for element in word_list[:-1]:
240 f.write('{:79}'.format(element)+'&\n')
241 f.write(word_list[-1]+'\n')
243 word_list = wrapper.wrap(text=type_line)
244 for element in word_list[:-1]:
245 f.write('{:79}'.format(element)+'&\n')
246 f.write(word_list[-1]+'\n')
248 if instance.md_start == 'pdbstart' and instance.unres_ff !='NEWCT-9P':
249 if instance.type == 'remd' or instance.type == 'dock':
250 f.write('print_min_ini print_min_res print_min_stat maxfun='+
251 str(instance.min_maxfun)+'\n')
253 f.write('print_min_ini print_min_res print_min_stat\n')
256 if instance.type == 'remd' or instance.type == 'dock':
257 word_list = wrapper.wrap(text=type_line2)
258 for element in word_list[:-1]:
259 f.write('{:79}'.format(element)+'&\n')
260 f.write(word_list[-1]+'\n')
262 tmp1=json.loads(instance.remd_multi_t)
264 word_list = wrapper.wrap(text=string1.join(tmp1))
265 for element in word_list[:-1]:
266 f.write('{:79}'.format(element)+'&\n')
267 f.write(word_list[-1]+'\n')
269 tmp1=json.loads(instance.remd_multi_m)
271 word_list = wrapper.wrap(text=string1.join(tmp1))
272 for element in word_list[:-1]:
273 f.write('{:79}'.format(element)+'&\n')
274 f.write(word_list[-1]+'\n')
276 if instance.saxs_data != '':
277 w+=' wsaxs='+str(instance.wsaxs)
281 if instance.type == 'min' or instance.md_start == 'pdbstart':
282 if instance.type == 'dock':
283 f.write('plik1ter.pdb\n')
285 f.write('plik.pdb\n')
286 f.write(write_ssbond(instance.ssbond))
287 if instance.md_2d == '':
290 if instance.unres_ff =='NEWCT-9P':
291 f.write(seq_2d_write_50(seq_2d_xx(instance.md_2d,seq)))
293 f.write(seq_2d_write(seq_2d_xx(instance.md_2d,seq)))
295 if instance.type == 'dock':
296 f.write('HOMOL_DIST=0.1 HOMOL_ANGLE=1.0 HOMOL_THETA=1.0 HOMOL_SCD=1.0 DIST_CUT=15.0 &\n')
297 f.write('READ2SIGMA START_FROM_MODELS\n')
298 for i in range(1,10):
299 f.write('model0'+str(i)+'.pdb\n')
300 for i in range(10,25):
301 f.write('model'+str(i)+'.pdb\n')
303 if instance.type == 'md' and instance.md_start != 'pdbstart':
305 if instance.md_pdbref:
306 f.write('plik.pdb\n')
307 f.write(str(len(seq))+'\n')
308 for i in range(0,len(seq),80):
309 f.write(seq[i:i+80]+'\n')
311 if instance.md_2d == '':
314 if instance.unres_ff =='NEWCT-9P':
315 f.write(seq_2d_write_50(seq_2d_xx(instance.md_2d,seq)))
317 f.write(seq_2d_write(seq_2d_xx(instance.md_2d,seq)))
320 f.write('ndist='+repr(instance.linijek_nmr)+' restr_type=12 scal_peak=')
321 f.write(repr(instance.nmr_scal)+' fordepth_peak='+repr(instance.nmr_fordepth))
322 f.write(' slope_peak='+repr(instance.nmr_slope)+'\n')
323 if (instance.myfile3=='files/N1008_AmbiR-trunc.txt'):
324 fnmr = open(instance.jobdirname+'/../files/N1008_AmbiR-trunc.txt', 'r')
329 fnmr = open(instance.jobdirname+'/plik3.nmr', 'r')
336 if instance.type == 'remd' and instance.md_start != 'pdbstart':
338 if instance.md_pdbref:
339 f.write('plik.pdb\n')
340 f.write(str(len(seq))+'\n')
341 for i in range(0,len(seq),80):
342 f.write(seq[i:i+80]+'\n')
344 if instance.md_2d == '':
347 if instance.unres_ff =='NEWCT-9P':
348 f.write(seq_2d_write_50(seq_2d_xx(instance.md_2d,seq)))
350 f.write(seq_2d_write(seq_2d_xx(instance.md_2d,seq)))
353 f.write('ndist='+repr(instance.linijek_nmr)+' restr_type=12 scal_peak=')
354 f.write(repr(instance.nmr_scal)+' fordepth_peak='+repr(instance.nmr_fordepth))
355 f.write(' slope_peak='+repr(instance.nmr_slope)+'\n')
356 if (instance.myfile3=='files/N1008_AmbiR-trunc.txt'):
357 fnmr = open(instance.jobdirname+'/../files/N1008_AmbiR-trunc.txt', 'r')
362 fnmr = open(instance.jobdirname+'/plik3.nmr', 'r')
369 if instance.saxs_data != '':
370 lines=instance.saxs_data.split('\n')
374 f.write(tmp[0]+' '+tmp[1]+'\n')
377 if instance.type == 'min':
378 os.chdir(instance.jobdirname)
379 if instance.unres_ff =='FF2':
380 shutil.copy('../files/pbs.csh','.')
381 elif instance.unres_ff =='NEWCT-9P':
382 shutil.copy('../files/pbs_newct-9p.csh','pbs.csh')
384 shutil.copy('../files/pbs_new.csh','pbs.csh')
385 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
387 elif instance.type == 'md':
388 os.chdir(instance.jobdirname)
389 if instance.unres_ff =='FF2':
390 f1 = open('../files/pbs_md.csh', 'r')
391 elif instance.unres_ff =='NEWCT-9P':
392 f1 = open('../files/pbs_md_newct-9p.csh', 'r')
394 f1 = open('../files/pbs_md_new.csh', 'r')
395 f2 = open('pbs.csh', 'w')
397 f2.write(line.replace('$dimen3',str(dimen3)+' '+str(instance.md_temp) ))
401 f1 = open('file.seq', 'w')
402 for i in range(0,len(seq),80):
403 f1.write(seq[i:i+80]+'\n')
407 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
410 # instance.type == 'remd'
411 tmp1=json.loads(instance.remd_multi_m)
412 nreplicas=sum(map(int, tmp1))
413 # hardcoded for 4 core nodes with FGPROC=2
414 nodes=int(nreplicas*2/4)
415 reszta = nreplicas*2-nodes*4
417 pbs = '#PBS -l nodes='+str(nodes)+':ppn=4'
419 pbs = '#PBS -l nodes='+str(nodes)+':ppn=4+1:ppn='+str(reszta)
422 if instance.ssbond!='':
425 for i in range(0,len(seq)):
430 ss=json.loads(instance.ssbond)
432 l.append(e[0]-ix[e[0]])
433 l.append(e[1]-ix[e[1]])
434 tmp_ss=' '.join(map(str,l))
436 os.chdir(instance.jobdirname)
437 if instance.unres_ff =='FF2':
438 f1 = open('../files/pbs8.csh', 'r')
439 elif instance.unres_ff =='NEWCT-9P':
440 f1 = open('../files/pbs8_newct-9p.csh', 'r')
442 f1 = open('../files/pbs8_new.csh', 'r')
443 f2 = open('pbs8.csh', 'w')
445 if '#PBS -l nodes=4:ppn=4' in line:
446 f2.write(line.replace('#PBS -l nodes=4:ppn=4', pbs))
447 elif '$ssbond' in line:
448 f2.write(line.replace('$ssbond',tmp_ss))
449 elif 'cd $PBS_O_WORKDIR' in line and instance.type == 'dock':
451 if instance.md_seq2 !='':
452 f2.write("""setenv FGPROCS 2
456 /users2/local/mpich2-1.4.1p1_intel/bin/mpirun -machinefile $PBS_NODEFILE -np 2 $UNRES_BIN
457 /users2/local/pulchra306/pulchra -q -g file2_MD000.pdb
458 cat file2_MD000.rebuilt.pdb |grep -v TER |grep -v END > tmp_plik2.pdb
459 /users2/local/mmtsb/perl/convpdb.pl -renumber 1 -out generic tmp_plik2.pdb > act.rebuilt.pdb
460 /users2/local/scwrl4/Scwrl4 -h -i act.rebuilt.pdb -o plik2.pdb
461 rm tmp_plik2.pdb act.rebuilt.pdb\n""")
462 if instance.dock_peptide:
463 f2.write('../files/generator_v13 plik.pdb plik2.pdb 1 \n')
465 f2.write('../files/generator_v13 plik.pdb plik2.pdb 0 \n')
466 f2.write("sed '/END/q' plik.pdb |grep ATOM > plik1ter.pdb \n")
467 f2.write("echo TER >> plik1ter.pdb \n")
468 f2.write("sed '/END/q' plik2.pdb |grep ATOM >> plik1ter.pdb \n")
470 tmp1=json.loads(instance.remd_multi_t)
471 f2.write(line.replace('$temperatures','"'+" ".join(tmp1)+'" '+str(nreplicas)))
475 f1 = open('file.seq', 'w')
476 for i in range(0,len(seq),80):
477 f1.write(seq[i:i+80]+'\n')
483 # write wham & cluster input
484 with open(instance.jobdirname+'/file_wham.inp','w') as f:
485 if instance.md_nstep/instance.md_ntwx*nreplicas<=8000:
488 isampl=int(instance.md_nstep/instance.md_ntwx*nreplicas/8000)
491 f.write('{:79}'.format('with_dist_constr constr_dist=12')+'&\n')
493 f.write('{:79}'.format(' isampl='+str(isampl))+'&\n')
494 if instance.md_pdbref:
495 f.write('{:79}'.format('SEED='+str(instance.md_seed)+
496 ' einicheck=1 rescale=2 delta=0.02 cxfile classify')+'&\n')
498 f.write('{:79}'.format('SEED='+str(instance.md_seed)+
499 ' einicheck=1 rescale=2 delta=0.02 cxfile')+'&\n')
500 if instance.md_2d != '':
501 f.write('{:79}'.format(' WITH_DIHED_CONSTR')+'&\n')
502 if instance.type == 'dock':
503 f.write('{:79}'.format(' n_ene=19 CONSTR_HOMOL=24')+'&\n')
504 if instance.unres_ff =='NEWCT-9P':
505 f.write('{:79}'.format('tormode=2 ')+'&\n')
506 f.write('BOXX='+str(instance.boxx)+' BOXY='+str(instance.boxy)+
507 ' BOXZ='+str(instance.boxz)+cntrl_saxs +'\n')
509 f.write('nres='+str(len(seq))+' one_letter\n')
510 for i in range(0,len(seq),80):
511 f.write(seq[i:i+80]+'\n')
513 f.write(write_ssbond(instance.ssbond))
517 f.write('ndist='+repr(instance.linijek_nmr)+' restr_type=12 scal_peak=')
518 f.write(repr(instance.nmr_scal)+' fordepth_peak='+repr(instance.nmr_fordepth))
519 f.write(' slope_peak='+repr(instance.nmr_slope)+'\n')
520 if (instance.myfile3=='files/N1008_AmbiR-trunc.txt'):
521 fnmr = open(instance.jobdirname+'/../files/N1008_AmbiR-trunc.txt', 'r')
526 fnmr = open(instance.jobdirname+'/plik3.nmr', 'r')
532 if instance.type == 'dock':
533 f.write('HOMOL_DIST=0.1 HOMOL_ANGLE=1.0 HOMOL_THETA=1.0 HOMOL_SCD=1.0 DIST_CUT=15.0 &\n')
534 f.write('READ2SIGMA \n')
535 for i in range(1,10):
536 f.write('model0'+str(i)+'.pdb\n')
537 for i in range(10,25):
538 f.write('model'+str(i)+'.pdb\n')
540 if instance.md_2d != '':
541 f.write(seq_2d_write_50(seq_2d_xx(instance.md_2d,seq)))
543 if instance.saxs_data != '':
548 fsaxs = open(instance.jobdirname+'/saxs.data', 'w')
549 lines=instance.saxs_data.split('\n')
553 f.write(tmp[0]+' '+tmp[1]+'\n')
554 saxs_r.append(tmp[0])
555 saxs_P.append(float(tmp[1]))
559 saxs_norm += float(tmp[1])*(float(tmp[0])-r_last)
561 for r,p in zip(saxs_r,saxs_P):
562 fsaxs.write('{} {}\n'.format(r,p/saxs_norm))
567 f.write('nt='+str(instance.remd_nrep)+' replica read_iset\n')
568 tmp1=json.loads(instance.remd_multi_t)
570 f.write('nr=1 temp='+element+' fi=0.0 0.0 0.0 0.0 0.0\n')
571 f.write('kh= 0.0 Q0=0.0\n')
572 rec=instance.md_nstep/instance.md_ntwx
573 f.write('nfile_cx=1 rec_start='+str(rec/10)
574 +' rec_end='+str(rec)+' totraj='+str(nreplicas)+'\n')
575 f.write('file_MD000\n')
576 if instance.md_pdbref:
578 if instance.type == 'dock':
579 f.write('plik1ter.pdb\n')
581 f.write('plik.pdb\n')
584 with open(instance.jobdirname+'/file_cluster.inp','w') as f:
585 f.write(instance.name + ' UNRES server job'+ '\n')
586 f.write('{:79}'.format('nres='+str(len(seq))
587 +' one_letter rescale=2 PRINT_CART PDBOUT=1 iopt=1'
588 +' temper='+str(instance.remd_cluter_temp)
589 +' nclust='+str(instance.remd_cluster_n))+'&\n')
590 if instance.md_2d != '':
591 f.write('{:79}'.format(' WITH_DIHED_CONSTR')+'&\n')
594 f.write('{:79}'.format('constr_dist=12 ')+'&\n')
596 if instance.type == 'dock':
597 f.write('{:79}'.format(' CONSTR_HOMOL=24')+'&\n')
598 if instance.unres_ff =='NEWCT-9P':
599 f.write('{:79}'.format('tormode=2 ')+'&\n')
600 f.write('BOXX='+str(instance.boxx)+' BOXY='+str(instance.boxy)+
601 ' BOXZ='+str(instance.boxz)+cntrl_saxs +'\n')
603 for i in range(0,len(seq),80):
604 f.write(seq[i:i+80]+'\n')
605 f.write(write_ssbond(instance.ssbond))
609 f.write('ndist='+repr(instance.linijek_nmr)+' restr_type=12 scal_peak=')
610 f.write(repr(instance.nmr_scal)+' fordepth_peak='+repr(instance.nmr_fordepth))
611 f.write(' slope_peak='+repr(instance.nmr_slope)+'\n')
612 if (instance.myfile3=='files/N1008_AmbiR-trunc.txt'):
613 fnmr = open(instance.jobdirname+'/../files/N1008_AmbiR-trunc.txt', 'r')
618 fnmr = open(instance.jobdirname+'/plik3.nmr', 'r')
624 if instance.type == 'dock':
625 f.write('HOMOL_DIST=0.1 HOMOL_ANGLE=1.0 HOMOL_THETA=1.0 HOMOL_SCD=1.0 DIST_CUT=15.0 &\n')
626 f.write('READ2SIGMA \n')
627 for i in range(1,10):
628 f.write('model0'+str(i)+'.pdb\n')
629 for i in range(10,25):
630 f.write('model'+str(i)+'.pdb\n')
631 if instance.md_2d != '':
632 f.write(seq_2d_write_50(seq_2d_xx(instance.md_2d,seq)))
633 if instance.saxs_data != '':
634 lines=instance.saxs_data.split('\n')
638 f.write(tmp[0]+' '+tmp[1]+'\n')
640 if instance.type == 'dock' and instance.md_seq2 != '':
641 with open(instance.jobdirname+'/file2.inp','w') as f:
642 f.write(instance.name + ' chain2 random start'+ '\n')
643 control_line = 'SEED='+str(instance.md_seed)+' '\
644 +'rand_conf md one_letter'\
645 + ' BOXX=1000 BOXY=1000 BOXZ=1000 '
647 if instance.unres_ff =='NEWCT-9P':
648 control_line = control_line+'tormode=2 cart'
650 type_line = ' reset_vel=0'\
655 +' dt=0.2 lang=1 scal_fric=0.02 respa mdpdb '
657 wrapper = textwrap.TextWrapper(width=70)
658 word_list = wrapper.wrap(text=control_line)
659 for element in word_list[:-1]:
660 f.write('{:79}'.format(element)+'&\n')
661 f.write(word_list[-1]+'\n')
663 word_list = wrapper.wrap(text=type_line)
664 for element in word_list[:-1]:
665 f.write('{:79}'.format(element)+'&\n')
666 f.write(word_list[-1]+'\n')
670 seq=instance.md_seq2.replace(" ","")
671 f.write(str(len(seq))+'\n')
672 for i in range(0,len(seq),80):
673 f.write(seq[i:i+80]+'\n')
678 os.chdir(instance.jobdirname)
679 ret_code = subprocess.Popen(' /opt/torque/bin/qsub pbs8.csh', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
682 output = str(ret_code.communicate()[0])
683 output=output.strip()
686 logger.warning("PBS \"%s\" " % output)
687 instance.pbsjob = output
690 # print ret_code.stdout.readlines()
691 logger.warning("Dir \"%s\" has been saved." % instance.jobdirname)
693 @receiver(post_delete, sender=Task)
694 def delete_on_task_del(sender, instance, **kwargs):
695 if instance.jobdirname:
696 if os.path.isdir(instance.jobdirname):
697 if not instance.done:
698 ret_code_qdel = subprocess.Popen(' /opt/torque/bin/qdel '+str(instance.pbsjob), shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
699 output = str(ret_code_qdel.communicate()[0])
700 output=output.strip()
701 logger.warning("PBS qdel \"%s\" " % instance.pbsjob)
702 logger.warning("QDEL \"%s\" " % output)
703 shutil.rmtree(instance.jobdirname)
704 logger.warning("Dir \"%s\" has been rm." % instance.jobdirname)