From 21b8567fa80d2727879fc32e70e98bc94cbae6fe Mon Sep 17 00:00:00 2001 From: Rone Charles Date: Fri, 4 Nov 2016 10:13:33 -0400 Subject: [PATCH] revive bowtie-build and bowtie-inspect scripts --- bowtie-build | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ bowtie-inspect | 75 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100755 bowtie-build create mode 100755 bowtie-inspect diff --git a/bowtie-build b/bowtie-build new file mode 100755 index 0000000..794889f --- /dev/null +++ b/bowtie-build @@ -0,0 +1,98 @@ +#!/usr/bin/env python + +""" + Copyright 2014, Ben Langmead + + This file is part of Bowtie. + + Bowtie 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 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. If not, see . +""" + + +import os +import sys +import inspect +import logging + + +def build_args(): + """ + Parse the wrapper arguments. Returns the options, tuple. + """ + + parsed_args = {} + to_remove = [] + argv = sys.argv[:] + for i, arg in enumerate(argv): + if arg == '--large-index': + parsed_args[arg] = "" + to_remove.append(i) + elif arg == '--debug': + parsed_args[arg] = "" + to_remove.append(i) + elif arg == '--verbose': + parsed_args[arg] = "" + to_remove.append(i) + + for i in reversed(to_remove): + del argv[i] + + return parsed_args, argv + + +def main(): + logging.basicConfig(level=logging.ERROR, + format='%(levelname)s: %(message)s' + ) + delta = 200 + small_index_max_size= 4 * 1024**3 - delta + build_bin_name = "bowtie-build" + build_bin_s = "bowtie-build-s" + build_bin_l = "bowtie-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) + + options, argv = build_args() + + if '--verbose' in options: + logging.getLogger().setLevel(logging.INFO) + + if '--debug' in options: + build_bin_spec += '-debug' + build_bin_l += '-debug' + + if '--large-index' in options: + 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[0] = build_bin_name + argv.insert(1, 'basic-0') + argv.insert(1, '--wrapper') + logging.info('Command: %s %s' % (build_bin_spec, ' '.join(argv[1:]))) + os.execv(build_bin_spec, argv) + +if __name__ == "__main__": + main() + + + diff --git a/bowtie-inspect b/bowtie-inspect new file mode 100755 index 0000000..99aa799 --- /dev/null +++ b/bowtie-inspect @@ -0,0 +1,75 @@ +#!/usr/bin/env python + +""" + Copyright 2014, Ben Langmead + + This file is part of Bowtie. + + Bowtie 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 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. If not, see . +""" + + +import os +import imp +import inspect +import logging + + + +def main(): + logging.basicConfig(level=logging.ERROR, + format='%(levelname)s: %(message)s' + ) + inspect_bin_name = "bowtie-inspect" + inspect_bin_s = "bowtie-inspect-s" + inspect_bin_l = "bowtie-inspect-l" + idx_ext_l = '.1.ebwtl'; + idx_ext_s = '.1.ebwt'; + curr_script = os.path.realpath(inspect.getsourcefile(main)) + ex_path = os.path.dirname(curr_script) + inspect_bin_spec = os.path.join(ex_path,inspect_bin_s) + bld = imp.load_source('bowtie-build',os.path.join(ex_path,'bowtie-build')) + options,arguments = bld.build_args() + + if '--verbose' in options: + logging.getLogger().setLevel(logging.INFO) + + if '--debug' in options: + inspect_bin_spec += '-debug' + inspect_bin_l += '-debug' + + if '--large-index' in options: + inspect_bin_spec = os.path.join(ex_path,inspect_bin_l) + elif len(arguments) >= 1: + idx_basename = arguments[-1] + large_idx_exists = os.path.exists(idx_basename + idx_ext_l) + small_idx_exists = os.path.exists(idx_basename + idx_ext_s) + if large_idx_exists and not small_idx_exists: + logging.info("No small index but a large one is present. Inspecting the large index.") + inspect_bin_spec = os.path.join(ex_path,inspect_bin_l) + + arguments[0] = inspect_bin_name + arguments.insert(1, 'basic-0') + arguments.insert(1, '--wrapper') + logging.info('Command: %s %s' % (inspect_bin_spec,' '.join(arguments[1:]))) + os.execv(inspect_bin_spec, arguments) + + +if __name__ == "__main__": + main() + + + + +