import sys
import os
-from gaworkflow.util.makebed import make_bed_from_eland_stream, make_description
+from htsworkflow.util.opener import autoopen
+from htsworkflow.util.makebed import make_bed_from_eland_stream, make_bed_from_multi_eland_stream, make_description
def make_parser():
parser = optparse.OptionParser()
parser.add_option("--lane", dest='lane',
help='specify which lane to use when retrieving description from database',
default=None)
+
+ multi = optparse.OptionGroup(parser, 'Multi-read ELAND support')
+
+ multi.add_option('-m', '--multi', action='store_true',
+ help='Enable parsing multi-read eland files',
+ default=False)
+ multi.add_option('--reads', type='int',
+ help='limit reporting multi reads to this many reads'
+ '(most usefully --reads=1 will turn a multi-read '
+ 'file into a single read file)',
+ default=255)
+ parser.add_option_group(multi)
+
return parser
def main(command_line=None):
+ instream = None
+ outstream = None
+
if command_line is None:
command_line = sys.argv[1:]
parser.error("Need eland input file name")
return 1
- if options.outname is None:
- options.outname = os.path.splitext(options.inname)[0]+'.bed'
- print >>sys.stderr, "defaulting to outputname", options.outname
-
- if os.path.exists(options.inname):
- instream = open(options.inname, 'r')
+ if options.inname == '-':
+ instream = sys.stdin
+ elif os.path.exists(options.inname):
+ instream = autoopen(options.inname, 'r')
else:
parser.error('%s was not found' % (options.inname))
return 1
- if os.path.exists(options.outname):
- parser.error("not overwriting %s" % (options.outname))
- return 1
- else:
- outstream = open(options.outname, 'w')
+ # figure out name for output file
+ if options.outname is None:
+ # if outname wasn't defined, and we're reading from stdout
+ if instream is sys.stdin:
+ # write to stdout
+ outstream = sys.stdout
+ else:
+ # if there's a name write to name.bed
+ options.outname = os.path.splitext(options.inname)[0]+'.bed'
+ print >>sys.stderr, "defaulting to outputname", options.outname
+ elif options.outname == '-':
+ outstream = sys.stdout
+
+ if outstream is None:
+ if os.path.exists(options.outname):
+ parser.error("not overwriting %s" % (options.outname))
+ return 1
+ else:
+ outstream = open(options.outname, 'w')
if options.flowcell is not None and options.lane is not None:
# get our name/description out of the database
name = options.name
description = options.description
- make_bed_from_eland_stream(instream, outstream, name, description, options.prefix)
+ if options.multi:
+ make_bed_from_multi_eland_stream(instream, outstream,
+ name, description,
+ options.prefix,
+ options.reads)
+
+ else:
+ make_bed_from_eland_stream(instream, outstream,
+ name, description,
+ options.prefix)
return 0
if __name__ == "__main__":