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]
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]
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
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, ]
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)
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
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() ]
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()]
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()]