Files
galaxy/tools/maf/maf_by_block_number.py
T

51 lines
1.6 KiB
Python

#!/usr/bin/env python
# Dan Blankenberg
"""
Reads a list of block numbers and a maf. Produces a new maf containing the
blocks specified by number.
"""
from __future__ import print_function
import sys
import bx.align.maf
from galaxy.tools.util import maf_utilities
def __main__():
input_block_filename = sys.argv[1].strip()
input_maf_filename = sys.argv[2].strip()
output_filename1 = sys.argv[3].strip()
block_col = int(sys.argv[4].strip()) - 1
if block_col < 0:
print("Invalid column specified", file=sys.stderr)
sys.exit(0)
species = maf_utilities.parse_species_option(sys.argv[5].strip())
maf_writer = bx.align.maf.Writer(open(output_filename1, "w"))
# we want to maintain order of block file and write blocks as many times as they are listed
failed_lines = []
for ctr, line in enumerate(open(input_block_filename)):
try:
block_wanted = int(line.split("\t")[block_col].strip())
except Exception:
failed_lines.append(str(ctr))
continue
try:
for count, block in enumerate(bx.align.maf.Reader(open(input_maf_filename))):
if count == block_wanted:
if species:
block = block.limit_to_species(species)
maf_writer.write(block)
break
except Exception:
print("Your MAF file appears to be malformed.", file=sys.stderr)
sys.exit()
if len(failed_lines) > 0:
print("Failed to extract from %i lines (%s)." % (len(failed_lines), ",".join(failed_lines)))
if __name__ == "__main__":
__main__()