Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
    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()
Exemplo n.º 4
0
    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()