snapshot of 4.0a development. initial git repo commit
[erange.git] / makesitetrack.py
1 #
2 #  makesitetrack.py
3 #  ENRAGE
4 #
5
6 import sys, string, optparse
7
8 print "%prog: version 2.1"
9
10
11 def main(argv=None):
12     if not argv:
13         argv = sys.argv
14
15     usage = "usage: python %prog sitefile outbedfile [--noheader] [--stype fieldID] [--color xx,yy,zz] [--append] [--exploded]"
16
17     parser = optparse.OptionParser(usage=usage)
18     parser.add_option("--noheader", action="store_true", dest="noHeader")
19     parser.add_option("--stype", type="int", dest="stypeID")
20     parser.add_option("--color", dest="color")
21     parser.add_option("--append", action="store_true", dest="append")
22     parser.add_option("--exploded", action="store_false", dest="compact")
23     parser.set_defaults(stypeID=None, color="0,0,0", append=False, compact=True, noHeader=False)
24     (options, args) = parser.parse_args(argv[1:])
25
26     if len(args) < 2:
27         print usage
28         sys.exit(1)
29
30     infile = args[0]
31     outfileName = args[1]
32     
33     makesitetrack(infile, outfileName, options.stypeID, options.color, options.append, options.compact, options.noHeader)
34
35
36 def makesitetrack(infileName, outFileName, stypeID=None, color="0,0,0", append=False, compact=True, noHeader=False):
37     if stypeID is not None:
38         doStype = True
39     else:
40         doStype = False
41         stypeID = 4
42
43     infile = open(infileName)
44
45     if append:
46         outfile = open(outFileName, "a")
47     else:
48         outfile = open(outFileName, "w")
49
50     try:
51         (name, extension) = outFileName.split(".")
52     except ValueError:
53         name = outFileName.split(".")[:-1]
54         name = string.join(name, "_")
55     
56     if not noHeader:
57         outfile.write('track name="%s" visibility=4 itemRgb="On"\n' % name)
58
59     count = 1
60     for line in infile:
61         if line[0] == "#":
62             continue
63
64         fields = line.split()
65         if compact:
66             (chrom, loc) = fields[0].split(":")
67             (start, stop) = loc.split("-")
68             score = fields[1]
69         else:
70             chrom = fields[1]
71             start = fields[2]
72             stop = fields[3]
73             score = 1.
74
75         stype = "%s-%s" % (name, str(count))
76         if doStype:
77             try:
78                 stype = fields[stypeID]
79                 if stype == "11":
80                     stype = "can"
81                 elif stype == "0":
82                     stype = "half"
83                 else:
84                     stype = "NC" + stype
85             except IndexError:
86                 pass
87
88         sense = fields[-2].strip()
89         if sense not in ["+", "-"]:
90             sense = "+"
91
92         outfile.write("%s\t%s\t%d\t%s\t%s\t%s\t-\t-\t%s\n" % (chrom, start, int(stop) + 1, stype, score, sense, color))
93         count += 1
94
95     outfile.close()
96
97
98 if __name__ == "__main__":
99     main(sys.argv)