def constrained_consensus_tree_splits(self, constrainTree=None, min_freq=constants.GREATER_THAN_HALF, is_rooted=None, summarize_splits=True, fill_bitmask=None, is_bipartitions_constrain_updated=False, **split_summarization_kwargs): """ Returns a consensus tree from splits in ``self``. Parameters ---------- constrainTree : Tree to constrain the consensus method min_freq : real The minimum frequency of a split in this distribution for it to be added to the tree. is_rooted : bool Should tree be rooted or not? If *all* trees counted for splits are explicitly rooted or unrooted, then this will default to |True| or |False|, respectively. Otherwise it defaults to |None|. fill_bitmask : int Leafset bitmask of the constraint Tree \*\*split_summarization_kwargs : keyword arguments These will be passed directly to the underlying `SplitDistributionSummarizer` object. See :meth:`SplitDistributionSummarizer.configure` for options. Returns ------- t : consensus tree """ assert constrainTree.taxon_namespace is self.taxon_namespace if is_rooted is None: if constrainTree.is_rooted & self.is_all_counted_trees_rooted(): is_rooted = True elif constrainTree.is_unrooted & self.is_all_counted_trees_strictly_unrooted( ): is_rooted = False constraintSplits = SplitDistribution( taxon_namespace=constrainTree.taxon_namespace) constraintSplits.count_splits_on_tree( tree=constrainTree, is_bipartitions_updated=is_bipartitions_constrain_updated, default_edge_length_value=None) fill_bitmask = constrainTree.seed_node.edge.bipartition._leafset_bitmask split_frequencies = self._get_split_frequencies() to_try_to_add = [] _almost_one = lambda x: abs(x - 1.0) <= 0.0000001 for s in split_frequencies: freq = split_frequencies[s] if (min_freq is None) or (freq >= min_freq) or (_almost_one(min_freq) and _almost_one(freq)): to_try_to_add.append((freq, s)) to_try_to_add.sort(reverse=True) ##We initiate the list with the constraintSplits splits_for_tree = [i for i in constraintSplits] splits_for_tree.extend([i[1] for i in to_try_to_add]) con_tree = Tree.from_split_bitmasks(split_bitmasks=splits_for_tree, taxon_namespace=self.taxon_namespace, is_rooted=is_rooted) if summarize_splits: self.summarize_splits_on_tree(tree=con_tree, is_bipartitions_updated=False, **split_summarization_kwargs) return con_tree