Download model/include/silent_tools/silentappendwaters from OneScience-Group/dl_binder_design: direct link, hf CLI and curl.
- Browser
- Download file 3.11 kB
-
https://huggingface.co/OneScience-Group/dl_binder_design/resolve/main/model/include/silent_tools/silentappendwaters
- Command line
-
hf download hf://OneScience-Group/dl_binder_design/model/include/silent_tools/silentappendwaters
-
curl -L -o silentappendwaters https://huggingface.co/OneScience-Group/dl_binder_design/resolve/main/model/include/silent_tools/silentappendwaters
3.11 kB
| #!/usr/bin/env python | |
| 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 | |
| # Don't throw an error when someone uses head | |
| from signal import signal, SIGPIPE, SIG_DFL | |
| signal(SIGPIPE, SIG_DFL) | |
| # This code assumes that the target backbone is fixed and will need major revisions if that is every changed - NRB | |
| 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 ) | |
| # I'm going to do this in 1000 struct chunks to minimize the amount of data being stored. this can easily be changed | |
| 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() | |