/** * Returns he set leaf nodes of the input tree that correspond to the input labels * * @param tree tree to search for the labels * @param labels the labels to search for * @return The set leaf nodes corresponding to the labels */ public static Set<TreeNode> getLeafesFromLabels(Set<String> labels, Tree tree) { Set<TreeNode> leafSet = new HashSet<TreeNode>(labels.size()); for (String label : labels) { leafSet.add(tree.getVertex(label)); } return leafSet; }
public static void keepLeafesWithLabelAndPruneTree(Tree tree, Collection<String> toKeep) { Set<TreeNode> nodesToKeep = new HashSet<TreeNode>(toKeep.size()); for (String s : toKeep) { nodesToKeep.add(tree.getVertex(s)); } keepLeafesAndPruneTree(tree, nodesToKeep); }
public static void pruneDegreeOneNodes(Tree tree, boolean sumEdgeWeight, boolean useParentWeight) { for (int i = 0; i < tree.getMaxIndex(); i++) { TreeNode n = tree.getVertex(i); if (n == null) { continue; } //prune the node, if it is not null pruneInnerNode(n, tree, sumEdgeWeight, useParentWeight); } }
private static boolean mergeTrees(Map<Set<String>, TreeNode> mergedTreeAsMap, Tree mergedTree, Set<Map<Set<String>, TreeNode>> trees2AddAsMap, Map<Map<Set<String>, TreeNode>, Tree> trees2Add) { //merge edges to leaves for (Map<Set<String>, TreeNode> tree2AddAsMap : trees2AddAsMap) { Tree tree2Add = trees2Add.get(tree2AddAsMap); for (TreeNode leaf : mergedTree.getLeaves()) { Edge e = leaf.getEdgeToParent(); e.setWeight(tree2Add.getVertex(leaf.getLabel()).getDistanceToParent() + e.getWeight()); } } //merge inner edges Iterator<Set<String>> tMerge = mergedTreeAsMap.keySet().iterator(); while (tMerge.hasNext()) { Set<String> nodeMerge = tMerge.next(); for (Map<Set<String>, TreeNode> tree2AddAsMap : trees2AddAsMap) { Iterator<Set<String>> t2Add = tree2AddAsMap.keySet().iterator(); while (t2Add.hasNext()) { Set<String> node2Add = t2Add.next(); if (node2Add.equals(nodeMerge)) { double weight = tree2AddAsMap.get(node2Add).getDistanceToParent(); tree2AddAsMap.remove(node2Add); Edge edge = mergedTreeAsMap.get(nodeMerge).getEdgeToParent(); edge.setWeight(edge.getWeight() + weight); break; } } } } return true; }
protected static int bcnPartitionDist(Tree t1, Tree t2) { int dist = 0; TreeCompareDefault tc = new TreeCompareDefault(t1); HashMap<TreeNode, BCNScore> c = tc.compare(t2); for (TreeNode n : c.keySet()) { BCNScore s = c.get(n); TreeNode o = t2.getVertex(s.getTargetIndex()); //System.out.println("Compare " + n.getPartition() + " to " + o.getPartition()); try { if (n.getPartition().compareTo(o.getPartition()) != 0) { dist++; } } catch (Exception e) { dist++; } } return dist; }
List<TreeNode> nodes = new LinkedList<>(); for (String s : clade) { nodes.add(rootedModel.getVertex(s));