Search in sources :

Example 1 with CorporealTreeModel

use of dr.evomodel.bigfasttree.ghosttree.CorporealTreeModel in project beast-mcmc by beast-dev.

the class CladeAwareSubtreePruneRegraft method getRelevantClade.

private CladeRef getRelevantClade(NodeRef nodeRef) {
    if (isGhostTree) {
        // TODO test this branch
        GhostTreeModel ghostTreeModel = ((GhostTreeModel) tree);
        CorporealTreeModel corporealTreeModel = ghostTreeModel.getCorporealTreeModel();
        if (((GhostTreeModel) tree).hasCorporealCounterPart(nodeRef)) {
            NodeRef corporealNode = ghostTreeModel.getCorporealCounterPart(nodeRef);
            if (corporealTreeModel.isRoot(corporealNode)) {
                return cladeModel.getClade(corporealNode);
            } else {
                return cladeModel.getClade(corporealTreeModel.getParent(corporealNode));
            }
        } else if (ghostTreeModel.getNextCorporealDescendent(nodeRef) != null) {
            NodeRef corporealNode = ghostTreeModel.getNextCorporealDescendent(nodeRef);
            if (corporealTreeModel.isRoot(corporealNode)) {
                return cladeModel.getClade(corporealNode);
            } else {
                return cladeModel.getClade(corporealTreeModel.getParent(corporealNode));
            }
        } else {
            if (tree.isRoot(nodeRef)) {
                return cladeModel.getClade(corporealTreeModel.getRoot());
            }
            return getRelevantClade(tree.getParent(nodeRef));
        }
    } else {
        return cladeModel.getClade(tree.getParent(nodeRef));
    }
}
Also used : NodeRef(dr.evolution.tree.NodeRef) CorporealTreeModel(dr.evomodel.bigfasttree.ghosttree.CorporealTreeModel) GhostTreeModel(dr.evomodel.bigfasttree.ghosttree.GhostTreeModel)

Aggregations

NodeRef (dr.evolution.tree.NodeRef)1 CorporealTreeModel (dr.evomodel.bigfasttree.ghosttree.CorporealTreeModel)1 GhostTreeModel (dr.evomodel.bigfasttree.ghosttree.GhostTreeModel)1