def consensusHarness(cSize,depth): print("^"*100) a = ArtificialPhylogeny(size=cSize,numChromosomes=5) evRates = [] while len( a.tree.getTips() ) < depth: # evRate = rn.uniform(0.2,0.75) evRate = 0.3 evRates.append(evRate) a.evolve(evolutionRate=evRate) print("Finished generating phylogeny. Score is {}. Rates were {}".format( a.tree.getScore(), evRates )) u = UPGMA( [t.genome for t in a.tree.getTips()]) u.calculate() root = Tk() d1 = TreeDrawer(root) d1.draw(a.tree,row=0,col=0) d2 = TreeDrawer(root, leafs=d1.leafs) d2.draw(u.tree,row=0,col=1) tree = u.tree uRF = fastRFDist(tree.toTuple(), a.tree.toTuple()) print("Finished upgma. Score is {}. RF distance is {}".format( tree.getScore(), uRF)) uRF = fastRFDist(a.tree.toTuple(), tree.toTuple()) uScore = tree.getScore() oldScore = tree.getScore() newScore = 0 counter = 0 n = NNI( tree ) nniTreeDrawers = [] while abs(newScore - oldScore) >= 1 and counter < 5: counter += 1 n.calculate(deepScoring=True) oldScore = newScore newScore = sum([t.getScore() for t in n.trees]) nRFs = [fastRFDist(t.toTuple(), a.tree.toTuple()) for t in n.trees] print("Running NNI. Current scores are {}. Current RF distances are {}".format([t.getScore() for t in n.trees], nRFs)) nniTreeDrawers = [] for i,tr in enumerate(n.trees): t= TreeDrawer(root,leafs=d1.leafs) t.draw(tr,row=1,col=i) nRFs = [fastRFDist(t.toTuple(), a.tree.toTuple()) for t in n.trees] print("Finished NNI. Scores are {}. RF distances are {}".format([t.getScore() for t in n.trees], nRFs)) c = ConsensusTree(n.trees) c.calculate() cRF = fastRFDist(tree.toTuple(), a.tree.toTuple()) print("Finished consensus. Score is {}. RF distance is {}".format( tree.getScore(), cRF)) tree = Tree( c.conTree ) t1= TreeDrawer(root,leafs=d1.leafs) t1.draw(tree,row=2,col=0) c.calculateNewGenomes() cRF = fastRFDist(c.conTree.toTuple(), a.tree.toTuple()) print("Recalculated Genomes in consensusTree. Score is {}. RF distance is {}".format( tree.getScore(), cRF)) t2= TreeDrawer(root,leafs=d1.leafs) t2.draw(c.conTree,row=2,col=1) for x in (0,1,2): Grid.columnconfigure(root,x,weight=1) for y in (0,1,2): Grid.rowconfigure(root,y,weight=1) root.mainloop() nScore = tree.getScore()