Exemple #1
0
 def betterer_neigh(self, z):
     g = DCJ(self._g)
     z = [DCJ(g._g) for g in z]
     neigh = g.betterer_neigh(z)
     if len(neigh) == 0:
         print '-----'
         print z[0]
         print z[1]
         print z[2]
     return [self.circularize3(h) for h in neigh]
Exemple #2
0
 def betterer_neigh (self, z):
     g = DCJ(self._g)
     z = [DCJ(g._g) for g in z]
     neigh = g.betterer_neigh(z)
     if len(neigh) == 0:
         print '-----'
         print z[0]
         print z[1]
         print z[2]
     return [self.circularize3(h) for h in neigh]
Exemple #3
0
    def median_solver(self, g1, g2, g3, errors=0):
        """
        Use ASMedian solver to find median of g1, g2, and g3.
        """
        if not (g1.multilin() and g2.multilin() and g3.multilin()):
            print g1
            print g2
            print g3
            raise TypeError("The input genomes are not multilinear")
        if MultiLinDCJ.nMedianCalls > 0:
            MultiLinDCJ.nMedianCalls -= 1
            if MultiLinDCJ.nMedianCalls == 0:
                sys.exit()

        r = str(randint(0, 99999))
        inf = "input" + r
        outf = "output" + r
        f = open(inf, 'w')
        f.write('> Genome 1\n')
        f.write(g1.__str__().replace("$", "$\n"))
        f.write('> Genome 2\n')
        f.write(g2.__str__().replace("$", "$\n"))
        f.write('> Genome 3\n')
        f.write(g3.__str__().replace("$", "$\n"))
        f.close()
        os.system('java -cp ms/ASM ASMedian ' + inf + ' >> ' + outf)
        f = open(outf, 'r')
        s = ''
        zac = False
        for line in f:
            if not zac:
                if line[0] == '>': zac = True
                continue
            pos = line.find(':')
            if pos == -1: break
            if line[pos - 1] == '-': s += line[pos + 1:] + ' $ '
            else: s += line[pos + 1:] + ' @ '
        f.close()
        os.system('rm ' + inf)
        os.system('rm ' + outf)
        print '.'
        M = DCJ(s)
        if self.n != M.n:
            if errors == 3:
                #TODO: najlepsie odchytit exception a vypisat historiu
                #sys.exit()
                return [g1, g2, g3]
            else:
                print "ASM ERROR"
                return self.median_solver(g1, g2, g3, errors + 1)
        r = self.linearize(M)
        return r
Exemple #4
0
    def median(self, g1, g2, g3, errors=0):  # pomocou median solvera
        """
        Use BIOMedian solver to find median of g1, g2, and g3.

        BIOMedian solves the median problem for multicircular DCJ model, 
        however, the input genomes have to be circular.
        """
        if not (g1.circular() and g2.circular() and g3.circular()):
            print g1
            print g2
            print g3
            raise TypeError("The input genomes are not circular")
        r = str(randint(0, 99999))
        inf = "input" + r
        outf = "input" + r + ".rst"
        f = open(inf, 'w')
        f.write('> Genome 1\n')
        f.write('C: ' + g1.__str__()[:-2] + '\n')
        f.write('> Genome 2\n')
        f.write('C: ' + g2.__str__()[:-2] + '\n')
        f.write('> Genome 3\n')
        f.write('C: ' + g3.__str__()[:-2] + '\n')
        f.close()
        #print g1
        #print g2
        #print g3
        os.system('java -cp ms/BIO BIOMedian ' + inf + ' >> /dev/null')
        f = open(outf, 'r')
        s = ''
        for line in f:
            if line[0] == '>': continue
            if line[0] == '#': break
            pos = line.find(':')
            s += line[pos + 1:] + ' @ '
        f.close()
        os.system('rm ' + inf)
        os.system('rm ' + outf)
        print '.',
        M = DCJ(s)
        if self.n != M.n:
            if errors == 3:
                #TODO: najlepsie odchytit exception a vypisat historiu
                #sys.exit()
                return [g1, g2, g3]
            else:
                print "BIO ERROR"
                return self.median(g1, g2, g3, errors + 1)
        r = self.circularize3(M)
        return [
            r,
        ]
Exemple #5
0
    def dist (self, B):
        if self.n != B.n:
            raise TypeError ("Computing distance of genomes with different number of markers.")
#             print 'BUUG, rozne dlzky', self.n, B.n; print self; print B
        inv, invs = (self.n + 2) * [0], (self.n + 2) * [True]
        for i in xrange(1, self.n + 1):
            inv[B.g[i]] = i
            invs[B.g[i]] = B.s[i]
        inv[self.n + 1] = self.n + 1
        pi, s = [], []
        for i in xrange(0, self.n + 2):
            pi.append(inv[self.g[i]])
            s.append (invs[self.g[i]] == self.s[i])
        # print pi, s
        d = DCJ(self.cappedString()).dist(DCJ(B.cappedString()))
        #print 'dcj: ', d
        badc, comp = self._find_components (pi, s)
        #print 'bad components: ', badc
        #print 'comp: ', comp
        if badc <= 2:
            return d + badc
        #print 'cover:'
        return d + self._cover(comp)
Exemple #6
0
    def median(self, g1, g2, g3):
        """
        Use ASMedian solver to find median of g1, g2, and g3.
        """
        TestDCJ2.nMedianCalls += 1
        if TestDCJ2.nMedianCalls > 100000:
            sys.exit()

        if not (g1.multilin() and g2.multilin() and g3.multilin()):
            print g1
            print g2
            print g3
            raise TypeError("The input genomes are not multilinear")

        r = str(randint(0, 99999))
        inf = "input" + r
        outf = "output" + r
        f = open(inf, 'w')
        f.write('> Genome 1\n')
        f.write(g1.__str__().replace("$", "$\n"))
        f.write('> Genome 2\n')
        f.write(g2.__str__().replace("$", "$\n"))
        f.write('> Genome 3\n')
        f.write(g3.__str__().replace("$", "$\n"))
        f.close()
        os.system('java -cp ms/ASM ASMedian ' + inf + ' >> ' + outf)
        f = open(outf, 'r')
        s = ''
        zac = False
        for line in f:
            if not zac:
                if line[0] == '>': zac = True
                continue
            pos = line.find(':')
            if pos == -1: break
            if line[pos - 1] == '-': s += line[pos + 1:] + ' $ '
            else: s += line[pos + 1:] + ' @ '
        f.close()
        os.system('rm ' + inf)
        os.system('rm ' + outf)
        print '.'
        M = DCJ(s)
        if self.n != M.n:
            print 'MS: ' + s
            sys.exit()
        r = self.linearize(M)
        return r
Exemple #7
0
 def better_neigh(self, z):
     g = DCJ(self.g)
     z = [DCJ(g.__str__()) for g in z]
     return [
         CircRev(h.__str__()) for h in g.betterer_neigh(z) if h.circular()
     ]
Exemple #8
0
 def better_neigh (self, z):
     g = DCJ(self.g)
     z = [DCJ(g.__str__()) for g in z]
     return [CircRev(h.__str__()) for h in g.betterer_neigh(z) if h.circular()]
Exemple #9
0
 def betterer_neigh (self, z):
     g = DCJ(self.g)
     z = [DCJ(g.__str__()) for g in z]
     return [LinRev(h.__str__()) for h in g.betterer_neigh(z) if h.linear()]