#!/usr/bin/env python
# Time-stamp: <distmatrix.py 2011-04-27 17:35:15 Mark Voorhies>
"""Script to calculate the uncentered pearson distance matrix
for the expression profiles in supp2data.csv."""

from math import sqrt
import csv
from SimpleCdt import writecdt

def uncentered(x,y):
    sxy = 0.
    sxx = 0.
    syy = 0.
    for i in xrange(len(x)):
        sxy += x[i]*y[i]
        sxx += x[i]**2
        syy += y[i]**2
    try:    
        return 1. - sxy/sqrt(sxx)/sqrt(syy)
    except ZeroDivisionError:
   s    return 0.0

def distancematrix(ratios):
    return [[uncentered(x,y) for y in ratios] for x in ratios]

def makefloat(x):
    try:
        return float(x)
    except:
        return 0.0


def parse(filename):
    r = csv.reader(open(filename))
    data = [i for i in r]
    ratios = [[makefloat(i) for i in row[2:]] for row in data[1:]]
    columns = data[0][2:]
    names = [i[0] for i in data[1:]]
    annotations = [i[1] for i in data[1:]]
    return (names, annotations, ratios)

def main():
    (names, annotations, ratios) = parse("supp2data.csv")
    names = names
    annotations = annotations
    ratios = [i for i in ratios]
    d = distancematrix(ratios)
    writecdt("distances.cdt", d, names, annotations, names)

if(__name__ == "__main__"):
    main()
