예제 #1
0
    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
예제 #2
0
    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']