def Align(self, s1, s2, result): result.clear() handle_tmpfile, filename_tmpfile = tempfile.mkstemp() os.write(handle_tmpfile, ">s1\n%s\n" % (s1)) os.write(handle_tmpfile, ">s2\n%s\n" % (s2)) os.close(handle_tmpfile) statement = string.join(("(", self.mEnvironment, self.mExecutable, self.mOptions, filename_tmpfile, ")"), " ") p = subprocess.Popen(statement, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) (file_stdout, file_stdin, file_stderr) = (p.stdin, p.stdout, p.stderr) file_stdin.close() lines = file_stdout.readlines() lines_stderr = file_stderr.readlines() exit_code = file_stdout.close() file_stderr.close() if exit_code: raise "Error while executing statement %s" % statement r = None for x in range(len(lines)): if re.search("Alignment \(FASTA format\):", lines[x]): r = Genomics.ParseFasta2Hash(lines[x + 2:]) break if not r: return None a1 = r['s1'] a2 = r['s2'] x1 = 1 x2 = 1 for pos in range(len(a1)): if a1[pos] in string.uppercase and a2[pos] in string.uppercase: result.addPairExplicit(x1, x2, 0) x1 += 1 x2 += 1 continue if a1[pos] != "-": x1 += 1 if a2[pos] != "-": x2 += 1 os.remove(filename_tmpfile) return result
def GetBlocks(self, s1, s2): """the strings have to be already aligned!!!""" handle_tmpfile, filename_tmpfile = tempfile.mkstemp() os.write(handle_tmpfile, ">s1\n%s\n" % (s1)) os.write(handle_tmpfile, ">s2\n%s\n" % (s2)) os.close(handle_tmpfile) statement = " ".join("(", self.mEnvironment, self.mExecutable % filename_tmpfile, self.mOptions, ")") p = subprocess.Popen(statement, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) (file_stdout, file_stdin, file_stderr) = (p.stdin, p.stdout, p.stderr) file_stdin.close() lines = file_stdout.readlines() lines_stderr = file_stderr.readlines() exit_code = file_stdout.close() file_stderr.close() if exit_code: raise ValueError("Error while executing statement %s" % statement) if not os.path.exists(filename_tmpfile + "-gb"): os.remove(filename_tmpfile) return "", "" lines = open(filename_tmpfile + "-gb").readlines() r = Genomics.ParseFasta2Hash(lines) if not r: return "", "" os.remove(filename_tmpfile) os.remove(filename_tmpfile + "-gb") os.remove(filename_tmpfile + "-gb.htm") return r['s1'], r['s2']