7 from distance_matrix
import DistanceMatrix
22 def __init__(self, distMatrtix, alignment=None, names=None):
30 raise RuntimeError(
"You must pass either an alignment or a list of names.")
38 L = self._distMatrix.columnNames
43 tree.add_child(name=seq, dist=0)
47 nearest_nbs = self._distMatrix.getNearestNeigbors()
48 node_i = tree.search_nodes(name=nearest_nbs[0])[0]
49 node_j = tree.search_nodes(name=nearest_nbs[1])[0]
50 L.remove(nearest_nbs[0])
51 L.remove(nearest_nbs[1])
55 node_k.name =
"X" + str(iter_count)
56 d_ij = self._distMatrix.getDistance(node_i.name, node_j.name)
58 d_ik = 0.5 * d_ij + 0.5 * (self._distMatrix.getSeparation(node_i.name) - self._distMatrix.getSeparation(node_j.name))
59 d_jk = 0.5 * d_ij + 0.5 * (self._distMatrix.getSeparation(node_j.name) - self._distMatrix.getSeparation(node_i.name))
61 tree.remove_child(node_i)
62 tree.remove_child(node_j)
63 node_k.add_child(node_i, dist=d_ik)
64 node_k.add_child(node_j, dist=d_jk)
65 tree.add_child(node_k)
69 d_km.append(0.5 * (self._distMatrix.getDistance(node_i.name, node_m) + self._distMatrix.getDistance(node_j.name, node_m) - d_ij) )
72 self._distMatrix.removeData((node_i.name, node_j.name))
73 self._distMatrix.appendData(d_km, node_k.name)
76 L = self._distMatrix.columnNames
78 last_nodes = tree.get_children()
79 d_ij = self._distMatrix.getDistance(last_nodes[0].name, last_nodes[1].name)
82 for node
in last_nodes:
87 new_root = node.detach()
91 new_root.add_child(leaf)