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
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