import sys
import string
import optparse
import math
from commoncode import getConfigParser, getConfigOption, getConfigIntOption

print "ratio: version 2.4"


def main(argv=None):
    if not argv:
        argv = sys.argv

    usage = "usage: python %prog denominatorField infile [--only fieldID] [--out outfile]"

    parser = makeParser(usage)
    (options, args) = parser.parse_args(argv[1:])

    if len(args) < 2:
        print usage
        sys.exit(1)

    field = int(args[0])
    if args[1] == "-":
        inFileName = sys.stdin
    else:
        inFileName = args[1]

    ratio(field, inFileName, options.outFileName, options.onlyField)


def makeParser(usage=""):
    parser = optparse.OptionParser(usage=usage)
    parser.add_option("--only", type="int", dest="onlyField")
    parser.add_option("--out", dest="outFileName")

    configParser = getConfigParser()
    section = "ratio"
    outFileName = getConfigOption(configParser, section, "outfile", None)
    onlyField = getConfigIntOption(configParser, section, "fieldID", -1)

    parser.set_defaults(outFileName=outFileName, onlyField=onlyField)

    return parser


def ratio(field, inFileName, outFileName=None, onlyField=-1):

    if inFileName is not None:
        infile = open(inFileName)
    else:
        infile = sys.stdin

    record = False
    if outFileName is not None:
        outfile = open(outFileName, "w")
        record = True

    doOnly = False
    if onlyField != -1:
        doOnly = True

    line = infile.readline()
    count = len(line.strip().split())
    if record:
        outfile.write(line)

    for line in infile:
        fields = line.strip().split()
        outline = str(fields[0])
        outError = False
        for index in range(1, count):
            if field == index:
                outline = string.join([outline, "0"], " ")
            elif doOnly and index != onlyField:
                outline = string.join([outline, str(fields[index])], " ")
            else:
                try:
                    ratioString = "%2.2f" % math.log((float(fields[index]) + 1)/(float(fields[field]) + 1), 2)
                    outline = string.join([outline, ratioString], " ")
                except:
                    try:
                        outline = string.join([outline, "e%s" % fields[index]], " ")
                    except:
                        outError = True

        if outError:
            continue

        if record:
            outfile.write(outline + "\n")
        else:
            print outline


if __name__ == "__main__":
    main(sys.argv)