--- /dev/null
+#!/usr/bin/python
+import optparse
+import sys
+import os
+
+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('-e', '--eland', dest='inname',
+ help='specify input eland filename')
+ parser.add_option('-b', '--bed', dest='outname',
+ help='specify output befilename')
+ parser.add_option('-n', '--name', dest='name',
+ help='specify the track (short) name.',
+ default=None)
+ parser.add_option('-d', '--description', dest='description',
+ help='specify the track description',
+ default=None)
+ parser.add_option('--chromosome', dest='prefix',
+ help='Set the chromosome prefix name. defaults to "chr"',
+ default='chr')
+ parser.add_option("--database", dest='database',
+ help="specify location of fctracker database",
+ default=None)
+ parser.add_option("--flowcell", dest='flowcell',
+ help="compute name and description from database using flowcell id",
+ default=None)
+ 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 = make_parser()
+ (options, args) = parser.parse_args(command_line)
+
+ if options.inname is None:
+ parser.error("Need eland input file name")
+ return 1
+
+ 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
+
+ # 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, description = make_description(
+ options.database, options.flowcell, options.lane
+ )
+ else:
+ name = options.name
+ description = options.description
+
+ 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__":
+ sys.exit(main(sys.argv[1:]))
+