Ejemplo n.º 1
0
def median(dnas, k):
    kmers = set()
    for dna in dnas:
        substr_kmers = set(["".join(x) for x in window(dna, k)])
        for kmer in substr_kmers:
            kmers.update(set(generate_words_with_mismatches(kmer, k)))
    opt_kmer = ''
    opt_distance = len(dnas)*k + 1
    for kmer in kmers:
        if opt_distance > d(kmer, dnas, k):
            opt_distance = d(kmer, dnas, k)
            opt_kmer = kmer
    return opt_kmer, opt_distance
Ejemplo n.º 2
0
def median(dnas, k):
    kmers = set()
    for dna in dnas:
        substr_kmers = set(["".join(x) for x in window(dna, k)])
        for kmer in substr_kmers:
            kmers.update(set(generate_words_with_mismatches(kmer, k)))
    opt_kmer = ''
    opt_distance = len(dnas) * k + 1
    for kmer in kmers:
        if opt_distance > d(kmer, dnas, k):
            opt_distance = d(kmer, dnas, k)
            opt_kmer = kmer
    return opt_kmer, opt_distance
Ejemplo n.º 3
0
def enumerate_motifs(dnas, k, d):
    kmers = []
    for text in dnas:
        kmers.extend(["".join(x) for x in window(text, k)])
    resulting_set = set()
    for kmer in kmers:
        for modified_kmer in generate_words_with_mismatches(kmer, d):
            will_add = True
            for text in dnas:
                was_found = False
                for fragment in ["".join(x) for x in window(text, k)]:
                    if hamming_distance(fragment, modified_kmer) <= d:
                        was_found = True
                        break
                if not was_found:
                    will_add = False
                    break
            if will_add:
                resulting_set.add(modified_kmer)
    return list(resulting_set)
Ejemplo n.º 4
0
    max_count = 0
    visited_kmers = set()
    for kmer in kmers:
        app = approx_pattern_count(text, kmer, d) + approx_pattern_count(
            text, reverse_dna(kmer), d)
        if app > 0 and kmer not in visited_kmers:
            if kmer not in count_dict:
                count_dict[kmer] = 0
            count_dict[kmer] += app
            if count_dict[kmer] > max_count:
                max_count = count_dict[kmer]

    result = [key for key in count_dict if count_dict[key] == max_count]
    return result, max_count


if __name__ == '__main__':
    with open('in.txt', 'r') as f:
        text = f.readline().strip()
        k, d = map(int, f.readline().split())

    substr_kmers = set(["".join(x) for x in window(text, k)])
    kmers = set()
    for kmer in substr_kmers:
        kmers.update(set(generate_words_with_mismatches(kmer, d)))

    result, max_count = frequent_words_with_mismatch(text, kmers, d)

    with open('out.txt', 'w') as f:
        f.write(str(' '.join(result)))
    max_count = 0
    visited_kmers = set()
    for kmer in kmers:
        app = approx_pattern_count(text, kmer, d) + approx_pattern_count(text, reverse_dna(kmer), d)
        if app > 0 and kmer not in visited_kmers:
            if kmer not in count_dict:
                count_dict[kmer] = 0
            count_dict[kmer] += app
            if count_dict[kmer] > max_count:
                max_count = count_dict[kmer]

    result = [key for key in count_dict if count_dict[key] == max_count]
    return result, max_count


if __name__ == '__main__':
    with open('in.txt', 'r') as f:
        text = f.readline().strip()
        k, d = map(int, f.readline().split())

    substr_kmers = set(["".join(x) for x in window(text, k)])
    kmers = set()
    for kmer in substr_kmers:
        kmers.update(set(generate_words_with_mismatches(kmer, d)))

    result, max_count = frequent_words_with_mismatch(text, kmers, d)

    with open('out.txt', 'w') as f:
        f.write(str(' '.join(result)))