def extract_tree_with_taxa(tree, taxa, suppress_unifurcations=True): taxon_to_leaf = {} for n in tree.preorder_node_iter(): n.keep = False if n.is_leaf(): taxon_to_leaf[n.taxon] = n for t in taxa: for n in taxon_to_leaf[t].ancestor_iter(inclusive=True): n.keep = True out = Tree() q_old = Queue() q_old.put(tree.seed_node) q_new = Queue() q_new.put(out.seed_node) while not q_old.empty(): n_old = q_old.get() n_new = q_new.get() for c_old in n_old.child_node_iter(): if c_old.keep: c_new = Node(taxon=c_old.taxon, label=c_old.label, edge_length=c_old.edge_length) n_new.add_child(c_new) q_old.put(c_old) q_new.put(c_new) if suppress_unifurcations: out.suppress_unifurcations() return out
results = line.strip().split(',') tree = Tree() root = Node() root.__dict__['label'] = results[0].replace("\"", "") nodes_dict[results[0].replace("\"", "")] = root prune = ['1'] #Add root node to tree tree.__dict__['_seed_node'].add_child(root) for line in lines: results = line.strip().split(',') node = Node() node.__dict__['label'] = results[0].replace("\"", "") node.taxon = Taxon(results[0].replace("\"", "")) nodes_dict[results[0].replace("\"", "")] = node nodes_dict[results[1].replace("\"", "")].add_child(node) if results[0].replace("\"", "") not in species: prune.append(results[0].replace("\"", "")) for taxa in prune: nodes_dict[taxa].label = '' # tree.delete_outdegree_one_nodes() tree.suppress_unifurcations() output = open(taxonomyTree, 'w') output.write(str(tree) + ";") output.close() lines.close()