Example #1
0
def updateEDMSTI(d, seq, tree, num, clusteringType):
    newD = {}

    if clusteringType == 'NJ':
        maxSimilarity = NJUtils.getMaxSimilarityForNJ(d, seq)
    elif clusteringType == 'UPGMA':
        maxSimilarity = UPGMAUtils.getMaxSimilarityForUPGMA(d)
    elif clusteringType == 'WPGMA':
        maxSimilarity = WPGMAUtils.getMaxSimilarityForWPGMA(d)

    f = maxSimilarity['key'][0]
    iF = seq.index(f)
    numF = num[iF]

    g = maxSimilarity['key'][1]
    if f == g:
        iG = iF + 1 + seq[iF + 1:].index(g)
    else:
        iG = seq.index(g)
    numG = num[iG]

    u = '(' + f + ':' + str(d[maxSimilarity['key']]) + ':' + g + ')'

    seq.remove(f)
    seq.remove(g)

    if clusteringType == 'NJ':
        delta = NJUtils.getDeltaDistForNJ(d, f, g, u, seq)
    elif clusteringType == 'UPGMA':
        delta = UPGMAUtils.getDeltaDistForUPGMA(d, f, g, u)
    elif clusteringType == 'WPGMA':
        delta = WPGMAUtils.getDeltaDistForWPGMA(d, f, g, u)

    tree.append({'1': u, '2': f, 'dist': delta[u, f]})
    tree.append({'1': u, '2': g, 'dist': delta[u, g]})

    for i in range(len(seq)):
        for j in range(len(seq)):
            if i != j:
                newD[seq[i], seq[j]] = d[seq[i], seq[j]]

    if clusteringType == 'NJ':
        newD = NJUtils.getDistUForNJ(d, newD, f, g, u, seq)
    elif clusteringType == 'UPGMA':
        newD = UPGMAUtils.getDistUForUPGMA(d, newD, f, g, u, seq, numF, numG)
    elif clusteringType == 'WPGMA':
        newD = WPGMAUtils.getDistUForWPGMA(d, newD, f, g, u, seq)

    seq.append(u)
    num.append(numF + numG + 1)

    return newD, seq, num, tree, iF, iG