def build_bid_taxonomy_map(self): self.bid_taxonomy_map = {} self.ranks_set = set([]) for node in self.tax_tree.traverse("postorder"): if not node.is_root() and hasattr(node, "B"): parent = node.up branch_rdiff = Taxonomy.lowest_assigned_rank_level(node.ranks) - Taxonomy.lowest_assigned_rank_level( parent.ranks ) branch_rank_id = Taxonomy.get_rank_uid(node.ranks) branch_len = node.dist self.bid_taxonomy_map[node.B] = (branch_rank_id, branch_rdiff, branch_len) self.ranks_set.add(branch_rank_id)
def build_bid_taxonomy_map(self): self.bid_taxonomy_map = {} self.ranks_set = set([]) for node in self.tax_tree.traverse("postorder"): if not node.is_root() and hasattr(node, "B"): parent = node.up branch_rdiff = Taxonomy.lowest_assigned_rank_level( node.ranks) - Taxonomy.lowest_assigned_rank_level( parent.ranks) branch_rank_id = Taxonomy.get_rank_uid(node.ranks) branch_len = node.dist self.bid_taxonomy_map[node.B] = (branch_rank_id, branch_rdiff, branch_len) self.ranks_set.add(branch_rank_id)
def label_bf_tree_with_ranks(self): """labeling inner tree nodes with taxonomic ranks""" if not self.bf_rooted_tree: raise AssertionError( "self.bf_rooted_tree is not set: TaxTreeHelper.set_bf_unrooted_tree() must be called before!" ) for node in self.bf_rooted_tree.traverse("postorder"): if node.is_leaf(): seq_ranks = self.origin_taxonomy[node.name] rank_level = Taxonomy.lowest_assigned_rank_level(seq_ranks) node.add_feature("rank_level", rank_level) node.add_feature("ranks", seq_ranks) node.name += "__" + seq_ranks[rank_level] else: if len(node.children) != 2: raise AssertionError( "FATAL ERROR: tree is not bifurcating!") lchild = node.children[0] rchild = node.children[1] rank_level = min(lchild.rank_level, rchild.rank_level) while rank_level >= 0 and lchild.ranks[ rank_level] != rchild.ranks[rank_level]: rank_level -= 1 node.add_feature("rank_level", rank_level) node_ranks = [Taxonomy.EMPTY_RANK] * max( len(lchild.ranks), len(rchild.ranks)) if rank_level >= 0: node_ranks[0:rank_level + 1] = lchild.ranks[0:rank_level + 1] node.name = lchild.ranks[rank_level] else: node.name = "Undefined" if hasattr(node, "B"): self.cfg.log.debug( "INFO: empty taxonomic annotation for branch %s (child nodes have no common ranks)", node.B) node.add_feature("ranks", node_ranks) self.tax_tree = self.bf_rooted_tree self.init_taxnode_map()
def label_bf_tree_with_ranks(self): """labeling inner tree nodes with taxonomic ranks""" if not self.bf_rooted_tree: raise AssertionError( "self.bf_rooted_tree is not set: TaxTreeHelper.set_bf_unrooted_tree() must be called before!" ) for node in self.bf_rooted_tree.traverse("postorder"): if node.is_leaf(): seq_ranks = self.origin_taxonomy[node.name] rank_level = Taxonomy.lowest_assigned_rank_level(seq_ranks) node.add_feature("rank_level", rank_level) node.add_feature("ranks", seq_ranks) node.name += "__" + seq_ranks[rank_level] else: if len(node.children) != 2: raise AssertionError("FATAL ERROR: tree is not bifurcating!") lchild = node.children[0] rchild = node.children[1] rank_level = min(lchild.rank_level, rchild.rank_level) while rank_level >= 0 and lchild.ranks[rank_level] != rchild.ranks[rank_level]: rank_level -= 1 node.add_feature("rank_level", rank_level) node_ranks = [Taxonomy.EMPTY_RANK] * max(len(lchild.ranks), len(rchild.ranks)) if rank_level >= 0: node_ranks[0 : rank_level + 1] = lchild.ranks[0 : rank_level + 1] node.name = lchild.ranks[rank_level] else: node.name = "Undefined" if hasattr(node, "B"): self.cfg.log.debug( "INFO: empty taxonomic annotation for branch %s (child nodes have no common ranks)", node.B ) node.add_feature("ranks", node_ranks) self.tax_tree = self.bf_rooted_tree self.init_taxnode_map()