def save_all_files(info, pdb1, ch1, pdb2, ch2, sol_num=5, dock_pool='.'): from use_dock import UseZDOCK dock = UseZDOCK(pool_path=dock_pool) area_file = dock_area(dock, info, pdb1, ch1, pdb2, ch2, sol_num, skip=False)[0][0] rcf_file = zdock_rcf(info, pdb1, ch1, pdb2, ch2, sol_num, dock_pool)[0][0] f1 = feature_rcf(info, area_file, rcf_file) f2 = feature_area(info, area_file, sol_num) f3 = feature_residue(info, area_file) if f1 == [] or f2 == [] or f3 == []: dock.clean_temp_path() return [] dock.prepare_data(pdb1, ch1, pdb2, ch2) if not os.path.exists('zdock_pool'): os.mkdir('zdock_pool') if not os.path.exists('zdock_pdbs'): os.mkdir('zdock_pdbs') if not os.path.exists('zdock_pool/'+dock.solution.split('/')[-1]): ## check one sfiles = dock.generate_complex(sol_num) from shutil import copy copy(dock.solution, 'zdock_pool/'+dock.solution.split('/')[-1]) copy(area_file, 'zdock_pool/'+area_file.split('/')[-1]) copy(rcf_file, 'zdock_pool/'+rcf_file.split('/')[-1]) for i in xrange(sol_num): copy(sfiles[i], 'zdock_pdbs/%s-%s-%s-%s-ZDOCK-%d.pdb'%(pdb1,ch1,pdb2,ch2,i+1)) # break ## save only one for now dock.clean_temp_path() return [a1+a2[1:]+a3[1:] for a1,a2,a3 in zip(f1,f2,f3)]
def zdock_clean(info, pdb1, ch1, pdb2, ch2, sol_num=5, pool='.'): from use_dock import UseZDOCK dock = UseZDOCK(pool_path=pool) infilename, linenum = dock_area(dock, info, pdb1, ch1, pdb2, ch2, sol_num, skip=True)[0] if linenum < sol_num: os.remove(infilename) dock.prepare_data(pdb1, ch1, pdb2, ch2) if os.path.exists(dock.solution) and dock.solution_number() < sol_num: os.remove(dock.solution) print 'Delete', dock.solution dock.clean_temp_path() show('The clean function has deleted %s'%infilename) return [[infilename, 'Deleted', linenum]] else: return []
def zdock_rcf(info, pdb1, ch1, pdb2, ch2, sol_num=None, pool='.'): from use_dock import UseZDOCK dock = UseZDOCK(pool_path=pool) outfile = '/rcf_%s_%s%s%s%s.txt'%(dock.TOOL.lower(),pdb1,ch1,pdb2,ch2) outfile = dock.POOL_PATH + outfile.replace(' ', '-') if os.path.exists(outfile) and len([l for l in open(outfile,'r')]) > 1: return [[outfile, 'Precomputed']] pdb1, ch1, pdb2, ch2 = dock.prepare_data(pdb1, ch1, pdb2, ch2) rcf_path = os.path.abspath(dock.TOOL_PATH + '/../proteins_journal') old_path = os.path.abspath('.') try: os.chdir(dock.TOOL_PATH) os.system('./mark_sur %s %s_m.pdb'%(dock._receptor, dock._receptor[:-4])) os.system('./mark_sur %s %s_m.pdb'%(dock._ligand, dock._ligand[:-4])) os.chdir(dock.TEMP_PATH) chain1 = os.path.basename(dock._receptor[:-4]+'_m.pdb') chain2 = os.path.basename(dock._ligand[:-4]+'_m.pdb') os.system("cp %s zout"%dock.solution) os.system('%s/source/reformat zout %s/source/euler.15 3.0'%(rcf_path, rcf_path)) os.system('%s/source/contact_frequency -i zout.hout -o CG'%rcf_path) os.system('perl %s/source/Cal_RCF.pl %s.CG'%(rcf_path, chain1)) os.system('perl %s/source/Cal_RCF.pl %s.CG'%(rcf_path, chain2)) os.system('cat %s.CG.RCF %s.CG.RCF > %s_old'%(chain1, chain2, outfile)) except Exception as e: print 'Failed to run RCF due to', e return [[outfile, 'Failed']] finally: dock.clean_temp_path() os.chdir(old_path) ## reformat file file1 = open(outfile + '_old', 'r') file2 = open(outfile, 'w') for line in file1: if line[0] in '-0123456789': ele = line.split('\t') pos, res, cha, val = ele[:4] val = float(val) if cha in dock.chain1_id: file2.write('%s\t%s\n'%(pdb1+':'+ch1.strip()+':'+pos, val)) elif cha in dock.chain2_id: file2.write('%s\t%s\n'%(pdb2+':'+ch2.strip()+':'+pos, val)) else: pass ## skip file1.close() file2.close() return [[outfile, 'New']]