6 def make_bed(instream, outstream, name, description, chromosome_prefix='chr'):
8 read an eland result file from instream and write a bedfile to outstream
10 # indexes into fields in eland_result.txt file
15 # map eland_result.txt sense
16 sense_map = { 'F': '+', 'R': '-'}
17 sense_color = { 'F': '0,0,255', 'R': '255,255,0' }
18 # provide default track names
19 if name is None: name = "track"
20 if description is None: description = "eland result file"
21 bed_header = 'track name="%s" description="%s" visibility=4 itemRgb="ON"'
22 bed_header += os.linesep
23 outstream.write(bed_header % (name, description))
27 # we need more than the CHR field, and it needs to match a chromosome
28 if len(fields) <= CHR or fields[CHR][:3] != chromosome_prefix:
31 stop = int(start) + len(fields[SEQ])
32 chromosome, extension = fields[CHR].split('.')
33 assert extension == "fa"
34 outstream.write('%s %s %d read 0 %s - - %s%s' % (
38 sense_map[fields[SENSE]],
39 sense_color[fields[SENSE]],
44 parser = optparse.OptionParser()
45 parser.add_option('-e', '--eland', dest='inname',
46 help='specify input eland filename')
47 parser.add_option('-b', '--bed', dest='outname',
48 help='specify output befilename')
49 parser.add_option('-n', '--name', dest='name',
50 help='specify the track (short) name.',
52 parser.add_option('-d', '--description', dest='description',
53 help='specify the track description',
55 parser.add_option('--chromosome', dest='prefix',
56 help='Set the chromosome prefix name. defaults to "chr"',
60 def main(command_line=None):
61 if command_line is None:
62 command_line = sys.argv[1:]
64 parser = make_parser()
65 (options, args) = parser.parse_args(command_line)
67 if options.inname is None:
68 parser.error("Need eland input file name")
71 if options.outname is None:
72 options.outname = os.path.splitext(options.inname)[0]+'.bed'
73 print >>sys.stderr, "defaulting to outputname", options.outname
75 if os.path.exists(options.inname):
76 instream = open(options.inname, 'r')
78 parser.error('%s was not found' % (options.inname))
81 if os.path.exists(options.outname):
82 parser.error("not overwriting %s" % (options.outname))
85 outstream = open(options.outname, 'w')
87 make_bed(instream, outstream, options.name, options.description, options.prefix)
90 if __name__ == "__main__":
91 sys.exit(main(sys.argv[1:]))