Ejemplo n.º 1
0
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()