| |
|
|
| import distutils.spawn |
| import os |
| import sys |
| sys.path.append(os.path.dirname(distutils.spawn.find_executable("silent_tools.py"))) |
| import silent_tools |
| from silent_tools import eprint |
| from multiprocessing import Pool |
|
|
| |
| from signal import signal, SIGPIPE, SIG_DFL |
| signal(SIGPIPE, SIG_DFL) |
|
|
| |
| if (len(sys.argv) == 1): |
| eprint("") |
| eprint('silentappendwaters by Nate - a tool to allow you to add waters directly to a silent file') |
| eprint("Usage:") |
| eprint(" silentappendwaters solvated_centered_target.silent file_of_docks.silent > file_of_solvated_docks.silent") |
| eprint("") |
| eprint(" WARNING!!! This only works in the very specific context of adding waters to a miniprotein binder dock where" ) |
| eprint(" the waters are assigned chain B (the target's chain). If you find the need to use this is another case, talk" ) |
| eprint(" to Nate (nrbennet@uw.edu) ") |
| sys.exit(1) |
|
|
| water_file = sys.argv[1] |
| silent_file = sys.argv[2] |
| n_cores = 1 |
| if len(sys.argv) > 3: |
| n_cores = int(sys.argv[3]) |
| try: |
| available = int(silent_tools.cmd( "echo $SLURM_CPUS_ON_NODE" )) |
| except(): |
| eprint("Parallel only available on a qlogin node") |
| sys.exit( 0 ) |
| if n_cores > available: |
| eprint( "More cpus requested (%i) than available (%i)"%(n_cores, available) ) |
| sys.exit( 0 ) |
|
|
| silent_index = silent_tools.get_silent_index( silent_file ) |
|
|
| ( RT_lines, xyz_lines, ann_seq_append, seq_append, edge_list ) = silent_tools.get_water_info( water_file ) |
|
|
| |
| seek_size = 1000 |
| cur_struct = 0 |
| ifile = 0 |
| total_structures = len(silent_index['tags']) |
| header = silent_tools.silent_header( silent_index ).split('\n') |
| header[0] += seq_append |
|
|
| sys.stdout.write( '\n'.join(header) ) |
| sys.stdout.flush() |
|
|
| parallel = n_cores > 1 |
| if parallel: |
| pool = Pool( n_cores ) |
|
|
| with open( silent_file ) as open_silent_file: |
| while cur_struct < total_structures: |
|
|
| if ( cur_struct + seek_size > total_structures ): |
| seek_size = total_structures - cur_struct |
|
|
| structures = silent_tools.get_silent_structures_true_slice( open_silent_file, |
| silent_index, cur_struct, cur_struct+seek_size, True ) |
|
|
| for structure in structures: |
| if parallel: |
| retval = pool.apply_async( silent_tools.solvate, args = [structure.split('\n'), RT_lines, xyz_lines, ann_seq_append, seq_append, edge_list] ) |
| solvated_structure = retval.get() |
| else: |
| solvated_structure = silent_tools.solvate( structure.split('\n'), RT_lines, xyz_lines, ann_seq_append, seq_append, edge_list ) |
| sys.stdout.write("\n".join(solvated_structure)) |
| sys.stdout.flush() |
|
|
| cur_struct += seek_size |
|
|
| if parallel: |
| pool.close() |
| pool.join() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|