예제 #1
0
파일: GATools.py 프로젝트: Al3n70rn/SCHISM
def get_consensus_edges(nwkFittestTrees):
    N = len(nwkFittestTrees)
    Edges = {} # track edge appearance across fittest trees
    cEdges = [] # edges labeled with fraction of times they appear
    for nwkTree in nwkFittestTrees:
        tree = Node.from_newick(nwkTree)
        tree.update_descendants()
        edges = tree.get_pairs()
        for edge in edges:
            if edge not in Edges.keys():
                Edges[edge] = 0
            Edges[edge]+=1

    # sort edges by value if they are numeric
    clusterLabels = list(set(zip(*Edges.keys())[0] + \
                             zip(*Edges.keys())[1]))
    # if cluster IDs are numeric, sort
    if sum([x.isdigit() for x in clusterLabels]) == len(clusterLabels):
        edgeKeys = sorted(Edges.keys(), \
                          key = lambda x: (int(x[0]),int(x[1])))
    else:
        edgeKeys = sorted(Edges.keys())

    # prepare to return edges labeled with frequency information
    for edge in edgeKeys:
         cEdges.append('\t'.join(map(str, edge) +\
                                 [str(float(Edges[edge])/N),\
                                 str(Edges[edge]) + '/' + str(N)]))

    return cEdges
예제 #2
0
def get_consensus_edges(nwkFittestTrees):
    N = len(nwkFittestTrees)
    Edges = {}  # track edge appearance across fittest trees
    cEdges = []  # edges labeled with fraction of times they appear
    for nwkTree in nwkFittestTrees:
        tree = Node.from_newick(nwkTree)
        tree.update_descendants()
        edges = tree.get_pairs()
        for edge in edges:
            if edge not in Edges.keys():
                Edges[edge] = 0
            Edges[edge] += 1

    # sort edges by value if they are numeric
    clusterLabels = list(set(zip(*Edges.keys())[0] + \
                             zip(*Edges.keys())[1]))
    # if cluster IDs are numeric, sort
    if sum([x.isdigit() for x in clusterLabels]) == len(clusterLabels):
        edgeKeys = sorted(Edges.keys(), \
                          key = lambda x: (int(x[0]),int(x[1])))
    else:
        edgeKeys = sorted(Edges.keys())

    # prepare to return edges labeled with frequency information
    for edge in edgeKeys:
        cEdges.append('\t'.join(map(str, edge) +\
                                [str(float(Edges[edge])/N),\
                                str(Edges[edge]) + '/' + str(N)]))

    return cEdges