X-Git-Url: http://woldlab.caltech.edu/gitweb/?a=blobdiff_plain;f=scripts%2Fhtsw-srf;fp=scripts%2Fhtsw-srf;h=bcf835dbfa29c1d3707d0e9e602d5c5882093ce4;hb=aa63dd36b1de178acea25d43d3aaef8716763d3d;hp=0000000000000000000000000000000000000000;hpb=5eba67d1e483b3b9abbb68ec3efdb1ef0e95bf46;p=htsworkflow.git diff --git a/scripts/htsw-srf b/scripts/htsw-srf new file mode 100755 index 0000000..bcf835d --- /dev/null +++ b/scripts/htsw-srf @@ -0,0 +1,126 @@ +#!/usr/bin/python + +import logging +import optparse +import os +import sys + +from htsworkflow.pipelines import runfolder +from htsworkflow.pipelines.srf import make_srf_commands, make_qseq_commands, \ + run_commands, pathname_to_run_name +from htsworkflow.pipelines.srf import ILLUMINA2SRF10, ILLUMINA2SRF11, SOLEXA2SRF + +def make_parser(): + usage = '%prog: [options] runfolder -l 1,2,3 [runfolder -l 5,6 ...]' + + parser = optparse.OptionParser(usage) + parser.add_option('--dry-run', action='store_true', + help='print what would be done', + default=False) + + parser.add_option('-d', '--dest-dir', dest='dest_dir', + help='location to write srf files to', + default='.') + parser.add_option('-s', '--site', + help='site name', + default='Individual') + parser.add_option('-l', '--lanes', dest='lanes', action="append", + default=[], + help='comma seperated list of lanes to add to srf' + ) + parser.add_option('-j', '--jobs', default=1, type='int', + help='how many jobs to run simultaneously') + parser.add_option('-r', '--runfolder-version', default=ILLUMINA2SRF11, type='int', + help='Which class of srf file should we attempt to create\n' + '0 = Solexa pipeline 0.2.6 - 0.3\n' + '1 = illumina pipeline 1.0\n' + '2 = illumina pipeline 1.1rc1 and later \n') + + parser.add_option('-v', '--verbose', dest='verbose', + default=False, action='store_true', + help='report more about internals (INFO)') + parser.add_option('--debug', dest='debug', + default=False, action='store_true', + help='report even more about internals (DEBUG)') + + return parser + +def parse_lane_arg(lane_arg): + """ + Convert comma sperated list of lane ids to a list of integers + """ + lanes = [] + for lane in lane_arg.split(','): + try: + lane = int(lane) + if lane < 1 or lane > 8: + parser.error('Lanes must be in range [1..8]') + lanes.append(lane) + except ValueError: + parser.error('Lane selections must be integers') + return lanes + +def main(cmdline=None): + parser = make_parser() + opts, args = parser.parse_args(cmdline) + + if opts.debug: + logging.basicConfig(level=logging.DEBUG) + elif opts.verbose: + logging.basicConfig(level=logging.INFO) + else: + logging.basicConfig(level=logging.WARNING) + + if len(args) == 0: + parser.error('need runfolder arguments') + + # parse lane arguemnts + lanes_list = [] + if len(opts.lanes) == 0: + lanes_list = [[1,2,3,4,5,6,7,8]] * len(args) + elif len(opts.lanes) == len(args): + for lane_arg in opts.lanes: + lanes_list.append(parse_lane_arg(lane_arg)) + else: + parser.error( + "Number of lane arguments must match number of runfolders" + ) + + make_commands = make_qseq_commands + # build list of commands + cmds = {} + for runfolder_path, lanes in zip(args, lanes_list): + # normalize paths, either relative to home dirs or current dir + runfolder_path = os.path.abspath(runfolder_path) + run_name = pathname_to_run_name(runfolder_path) + # so any bustard directories? + runs = runfolder.get_runs(runfolder_path) + # give up if there are anything other than 1 run + if len(runs) > 1: + print 'ERROR: Too many run directories in %s' %(runfolder_path,) + return 1 + elif len(runs) == 1: + bustard_dir = runs[0].bustard.pathname + cmds[bustard_dir] = make_commands(run_name, + bustard_dir, + lanes, + opts.site, + opts.dest_dir, + opts.runfolder_version) + else: + print "ERROR: Couldn't find a bustard directory in", runfolder_path + return 1 + + if not opts.dry_run: + for cwd, cmd_list in cmds.items(): + run_commands(cwd, cmd_list, opts.jobs) + else: + for cwd, cmd_list in cmds.items(): + print cwd + print cmd_list + print 'jobs: ', opts.jobs + + return 0 + +if __name__ == "__main__": + sys.exit(main(sys.argv[1:]))