| |
|
|
| 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 |
| import re |
|
|
| |
| from signal import signal, SIGPIPE, SIG_DFL |
| signal(SIGPIPE, SIG_DFL) |
|
|
| if (len(sys.argv) == 1): |
| eprint("") |
| eprint('silentdropcorruptmodels by bcov - drop models with wrong number of residues') |
| eprint("Usage:") |
| eprint(" silentdropcorruptmodels myfile.silent > fixed.silent") |
| sys.exit(1) |
|
|
| silent_file = sys.argv[1] |
|
|
| silent_index = silent_tools.get_silent_index( silent_file, accept_garbage=True) |
|
|
|
|
| is_binary = silent_index['silent_type'] == "BINARY" |
| is_protein = silent_index['silent_type'] == "PROTEIN" |
|
|
| if ( not is_binary and not is_protein ): |
| eprint("silentdropcorruptmodels: Unknown silent type. Trying BINARY") |
| is_binary = True |
|
|
| sys.stdout.write( silent_tools.silent_header_fix_corrupt( silent_index ) ) |
| sys.stdout.flush() |
|
|
| with open(silent_file, errors='ignore') as sf: |
| for tag in silent_index['tags']: |
|
|
| structure = silent_tools.get_silent_structure_file_open( sf, silent_index, tag ) |
|
|
| try: |
| sequence_chunks = silent_tools.get_sequence_chunks( structure, tag ) |
| except: |
| eprint("silentdropcorruptmodels: Error reading sequence: %s"%(tag)) |
| continue |
| if ( sequence_chunks is None ): |
| continue |
| sequence = "".join(sequence_chunks) |
| seqlen = len(sequence) |
|
|
|
|
| assert( is_binary ^ is_protein ) |
|
|
| num_res_lines = 0 |
| for line in structure: |
| if ( is_binary ): |
| if ( len(line) == 0 ): |
| continue |
| if ( line[0] in "HEL" ): |
| num_res_lines += 1 |
| if ( is_protein ): |
| if ( len(line) < 6 ): |
| continue |
| if ( line[5] in "HEL" ): |
| num_res_lines += 1 |
|
|
|
|
| if ( seqlen != num_res_lines ): |
| eprint("silentdropcorruptmodels: Found %5i res expected %5i res: %s"% |
| (num_res_lines, seqlen, tag)) |
| else: |
| sys.stdout.write("".join(structure)) |
| sys.stdout.flush() |
|
|
|
|
|
|