#!/usr/bin/env python """ Copyright 2014, Ben Langmead This file is part of Bowtie 2. Bowtie 2 is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Bowtie 2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Bowtie 2. If not, see . """ import os import sys import inspect import logging import argparse import subprocess from collections import deque def main(): parser = argparse.ArgumentParser(add_help = False) parser.add_argument('--large-index', action='store_true') parser.add_argument('--verbose', action='store_true') group = parser.add_mutually_exclusive_group() group.add_argument('--debug', action='store_true') group.add_argument('--sanitized', action='store_true') logging.basicConfig(level=logging.ERROR, format='%(levelname)s: %(message)s' ) delta = 200 small_index_max_size= 4 * 1024**3 - delta build_bin_name = 'bowtie2-build' build_bin_s = 'bowtie2-build-s' build_bin_l = 'bowtie2-build-l' curr_script = os.path.realpath(inspect.getsourcefile(main)) ex_path = os.path.dirname(curr_script) build_bin_spec = os.path.join(ex_path,build_bin_s) script_options, argv = parser.parse_known_args() print_help = False argv = deque(argv) if '-h' in argv or '--help' in argv: print_help = True if script_options.verbose: logging.getLogger().setLevel(logging.INFO) if script_options.debug: build_bin_spec += '-debug' build_bin_l += '-debug' if script_options.sanitized: build_bin_spec += '-sanitized' build_bin_l += '-sanitized' if script_options.large_index: build_bin_spec = os.path.join(ex_path,build_bin_l) elif len(argv) >= 2: ref_fnames = argv[-2] tot_size = 0 for fn in ref_fnames.split(','): if os.path.exists(fn): statinfo = os.stat(fn) tot_size += statinfo.st_size if tot_size > small_index_max_size: build_bin_spec = os.path.join(ex_path,build_bin_l) argv.appendleft('basic-0') argv.appendleft('--wrapper') argv.appendleft(build_bin_spec) logging.info('Command: %s' % ' '.join(argv)) sys.exit(subprocess.call(list(argv))) if __name__ == '__main__': main()