def get_pairwise_dists(tree, mainsp): """get pairwise distances between the main taxon and the rest of the taxa""" lst = [] for sp in tree.leaf_names(): lst.append((sp, treelib.find_dist(tree, mainsp, sp))) lst.sort(key=lambda x: x[1]) names, dists = zip(*lst) return names, dists
def get_pairwise_dists(tree, mainsp): """get pairwise distances between the main taxon and the rest of the taxa""" lst = [] for sp in tree.leaf_names(): lst.append((sp, treelib.find_dist(tree, mainsp, sp))) lst.sort(key=lambda x: x[1]) names, dists = zip(* lst) return names, dists
def tree2distmat(tree, leaves): """Returns pair-wise distances between leaves of a tree""" # TODO: not implemented efficiently mat = [] for i in range(len(leaves)): mat.append([]) for j in range(len(leaves)): mat[-1].append(treelib.find_dist(tree, leaves[i], leaves[j])) return mat
if __name__ == "__main__": stree = treelib.read_tree('simple.stree') popsize = 1e4 freq = 1e0 dr = 2.1 lr = 2.0 freqdup = .07 freqloss = .05 forcetime = 1e0 gtree = sim_tree(stree, popsize, freq, dr, lr, freqdup, freqloss, forcetime) treelib.draw_tree(stree, scale=1) print for leaf in stree.leaves(): print leaf.name, treelib.find_dist(stree, stree.root.name, leaf.name) print treelib.draw_tree(gtree, scale=1) print if len(gtree.nodes) > 1: for leaf in gtree.leaves(): print leaf.name, treelib.find_dist(gtree,gtree.root.name,leaf.name), leaf.data['freq'] else: print 'only the root remains' # if len(gtree.nodes) > 1: # extant_count = 0 # for leaf in gtree.leaves(): # if leaf.data['freq'] > 0.0: # extant_count += 1