def runAsMedianMedianProblemTest(medianHistory): """Runs AsMedian, requires to be installed. I got it from: https://sites.google.com/site/andrewweixu/Home/software/asmedian """ #Dump to disk tempFile = os.path.join(os.getcwd(), "simulatedGenomeTempFile.txt") fileHandle = open(tempFile, 'w') fileHandle.write(medianHistory.getLeafGenomeString()) fileHandle.close() #-cp /Users/benedictpaten/Desktop/ASMedian-1.0 popenCatch("java BIOMedian %s" % tempFile) os.remove(tempFile) #Parse in fileHandle = open(tempFile + ".rst", 'r') input = fileHandle.readlines() fileHandle.close() os.remove(tempFile + ".rst") asMedianMedianGenome = Genome(chromosomeNumber=0, elementNumber=0) for line in input[1:]: if line[0] == '#': break asMedianChromosome = Chromosome() for element in line.split()[1:]: asMedianChromosome.append(int(element)) asMedianMedianGenome.addChromosome(asMedianChromosome) return asMedianMedianGenome
def runReferenceMedianProblemTest(medianHistory, greedyIterations,theta): """Runs the reference problem for a given median history """ #Make adjacencies stubNumber = 2 nodeNumber = len(medianHistory.getMedianGenome().getElements()) * 2 + stubNumber; weights = {} for genome in medianHistory.getLeafGenomes(): for node1, node2, distance in genome.getTransitiveAdjacencies(): if (node1, node2) in weights: weights[(node1, node2)] += weightFn(distance, theta) else: weights[(node1, node2)] = weightFn(distance, theta) def translateLeftSideOfElementToNode(element): assert element != 0 if element < 0: return abs(element) * 2 return element * 2 + 1 def translateLeftNodeToElement(node): assert node >= stubNumber assert node < nodeNumber element = node / 2 if (node % 2) == 0: element *= -1 return element #Now print out the input = "%i\t%i\t%i\t%i\t%s" % (greedyIterations, nodeNumber, stubNumber, len(weights.keys()), "\t".join([ "%i\t%i\t%f" % (translateLeftSideOfElementToNode(-node1), translateLeftSideOfElementToNode(node2), weights[(node1, node2)]) for (node1, node2) in weights.keys()])) #Command command = os.path.join(os.path.split(os.path.abspath(matchingAndOrdering.tests.simulatedGenome.__file__))[0], "testBin", "referenceMedianProblemTest2") output = popenCatch(command, input) medianChromosome = Chromosome() for adjacency in output.split(): medianChromosome.append(translateLeftNodeToElement(int(adjacency))) medianGenome = Genome(chromosomeNumber=0, elementNumber=0) medianGenome.addChromosome(medianChromosome) assert medianGenome.getElements() == medianHistory.getMedianGenome().getElements() return medianGenome
def testGenome(self): """Test basic functions of a genome """ d = Genome(elementNumber=10, chromosomeNumber=3) self.assertEqual(d.getChromosomeNumber(), 3) self.assertEqual(d.getElements(), set(range(1, 11))) #Test clone self.assertEqual(str(d), str(d.clone())) #Test inversions for i in xrange(100): e = d.clone() self.assertEquals(d.getOutOfOrderDistance(e), 0) self.assertEquals(d.getCircularDcjDistance(e), 0) e.permuteByInversion() self.assertEquals(e.getChromosomeNumber(), 3) self.assertEquals(e.getElements(), d.getElements()) self.assertTrue(d.getOutOfOrderDistance(e) >= 0) self.assertTrue(d.getCircularDcjDistance(e) in [ 0, 1 ]) #Test dcj for i in xrange(100): e = d.clone() self.assertEquals(d.getOutOfOrderDistance(e), 0) self.assertEquals(d.getCircularDcjDistance(e), 0) e.permuteByDcj() self.assertEquals(e.getElements(), d.getElements()) self.assertTrue(d.getOutOfOrderDistance(e) >= 0) self.assertTrue(d.getCircularDcjDistance(e) in [ 0, 1, 2 ]) #Test translocations for i in xrange(100): e = d.clone() self.assertEquals(d.getOutOfOrderDistance(e), 0) self.assertEquals(d.getCircularDcjDistance(e), 0) e.permuteByTranslocation() self.assertEquals(e.getElements(), d.getElements()) self.assertTrue(d.getOutOfOrderDistance(e) >= 0) self.assertTrue(d.getCircularDcjDistance(e) in [ 0, 1, 2 ])
def testGenome(self): """Test basic functions of a genome """ d = Genome(elementNumber=10, chromosomeNumber=3) self.assertEqual(d.getChromosomeNumber(), 3) self.assertEqual(d.getElements(), set(range(1, 11))) #Test clone self.assertEqual(str(d), str(d.clone())) #Test inversions for i in xrange(100): e = d.clone() self.assertEquals(d.getOutOfOrderDistance(e), 0) self.assertEquals(d.getCircularDcjDistance(e), 0) e.permuteByInversion() self.assertEquals(e.getChromosomeNumber(), 3) self.assertEquals(e.getElements(), d.getElements()) self.assertTrue(d.getOutOfOrderDistance(e) >= 0) self.assertTrue(d.getCircularDcjDistance(e) in [0, 1]) #Test dcj for i in xrange(100): e = d.clone() self.assertEquals(d.getOutOfOrderDistance(e), 0) self.assertEquals(d.getCircularDcjDistance(e), 0) e.permuteByDcj() self.assertEquals(e.getElements(), d.getElements()) self.assertTrue(d.getOutOfOrderDistance(e) >= 0) self.assertTrue(d.getCircularDcjDistance(e) in [0, 1, 2]) #Test translocations for i in xrange(100): e = d.clone() self.assertEquals(d.getOutOfOrderDistance(e), 0) self.assertEquals(d.getCircularDcjDistance(e), 0) e.permuteByTranslocation() self.assertEquals(e.getElements(), d.getElements()) self.assertTrue(d.getOutOfOrderDistance(e) >= 0) self.assertTrue(d.getCircularDcjDistance(e) in [0, 1, 2])