first pass cleanup of cistematic/genomes; change bamPreprocessing
[erange.git] / ratio.py
1 import sys
2 import string
3 import optparse
4 import math
5 from commoncode import getConfigParser, getConfigOption, getConfigIntOption
6
7 print "ratio: version 2.4"
8
9
10 def main(argv=None):
11     if not argv:
12         argv = sys.argv
13
14     usage = "usage: python %prog denominatorField infile [--only fieldID] [--out outfile]"
15
16     parser = makeParser(usage)
17     (options, args) = parser.parse_args(argv[1:])
18
19     if len(args) < 2:
20         print usage
21         sys.exit(1)
22
23     field = int(args[0])
24     if args[1] == "-":
25         inFileName = sys.stdin
26     else:
27         inFileName = args[1]
28
29     ratio(field, inFileName, options.outFileName, options.onlyField)
30
31
32 def makeParser(usage=""):
33     parser = optparse.OptionParser(usage=usage)
34     parser.add_option("--only", type="int", dest="onlyField")
35     parser.add_option("--out", dest="outFileName")
36
37     configParser = getConfigParser()
38     section = "ratio"
39     outFileName = getConfigOption(configParser, section, "outfile", None)
40     onlyField = getConfigIntOption(configParser, section, "fieldID", -1)
41
42     parser.set_defaults(outFileName=outFileName, onlyField=onlyField)
43
44     return parser
45
46
47 def ratio(field, inFileName, outFileName=None, onlyField=-1):
48
49     if inFileName is not None:
50         infile = open(inFileName)
51     else:
52         infile = sys.stdin
53
54     record = False
55     if outFileName is not None:
56         outfile = open(outFileName, "w")
57         record = True
58
59     doOnly = False
60     if onlyField != -1:
61         doOnly = True
62
63     line = infile.readline()
64     count = len(line.strip().split())
65     if record:
66         outfile.write(line)
67
68     for line in infile:
69         fields = line.strip().split()
70         outline = str(fields[0])
71         outError = False
72         for index in range(1, count):
73             if field == index:
74                 outline = string.join([outline, "0"], " ")
75             elif doOnly and index != onlyField:
76                 outline = string.join([outline, str(fields[index])], " ")
77             else:
78                 try:
79                     ratioString = "%2.2f" % math.log((float(fields[index]) + 1)/(float(fields[field]) + 1), 2)
80                     outline = string.join([outline, ratioString], " ")
81                 except:
82                     try:
83                         outline = string.join([outline, "e%s" % fields[index]], " ")
84                     except:
85                         outError = True
86
87         if outError:
88             continue
89
90         if record:
91             outfile.write(outline + "\n")
92         else:
93             print outline
94
95
96 if __name__ == "__main__":
97     main(sys.argv)