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