найти штрих-код ДНК с несовпадениями в последовательности

У меня 36-nt читается так: atcttgttcaatggccgatcXXXXgtcgacaatcaa в файле fastq, где XXXX — разные штрих-коды. Я хочу найти штрих-код в файле в точной позиции (от 21 до 24) и распечатать последовательности, содержащие до 3 несоответствий, а не штрих-код.

Например: у меня есть штрих-код: aacg найдите этот штрих-код между позициями 21 и 24 в файле fastq, допустив 3 несоответствия в последовательности, например:

atcttgttcaatggccgatcaacggtcgacaatcac # it has 1 mismatch
ttcttgttcaatggccgatcaacggtcgacaatcac # it has 2 mismatch
tccttgttcaatggccgatcaacggtcgacaatcac # it has 3 mismatch

Сначала я пытался найти уникальные строки, используя awk, и искать несоответствия, но мне очень утомительно искать и находить их.

awk 'NR%4==2' 1.fq |sort|uniq -c|awk '{print $1"\t"$2}' > out1.txt

Есть ли быстрый способ найти?

Спасибо.


person abh    schedule 17.04.2013    source источник
comment
Я запутался. Какое отношение штрих-коды имеют к нуклеотидным последовательностям?   -  person Kevin    schedule 17.04.2013
comment
изначально я искал штрих-коды для определенной позиции, и я получил очень малое количество, и с 1 несоответствием в последовательности я получил большое количество. Итак, если я укажу несоответствия в последовательности, я получу больше последовательностей (и я хочу попробовать до 3 )   -  person abh    schedule 17.04.2013
comment
Итак, вы сканируете штрих-коды? Например, черно-белые узоры в виде полос, которые кассиры супермаркетов используют для определения цены на товары? Потому что я до сих пор понятия не имею, как можно получить ДНК из штрих-кода.   -  person Kevin    schedule 17.04.2013
comment
@kevin en.wikipedia.org/wiki/DNA_barcoding   -  person danfuzz    schedule 18.04.2013


Ответы (3)


Использование Python:

strs = "atcttgttcaatggccgatcaacggtcgacaatcaa"

with open("1.fq") as f:
    for line in f:
        if line[20:24] == "aacg":
            line = line.strip()
            mismatches = sum(x!=y for x, y  in zip(strs, line))
            if mismatches <= 3:
                print line, mismatches

atcttgttcaatggccgatcaacggtcgacaatcac 1
ttcttgttcaatggccgatcaacggtcgacaatcac 2
tccttgttcaatggccgatcaacggtcgacaatcac 3
person Ashwini Chaudhary    schedule 17.04.2013
comment
ATCTTGTTCAATGGCCGATCAACGGTCGACAATCAA ATCTTGTTCAATGGCCGATCAACGCTCGACAATCAA 3 AGCTTGTTCAATGGCCGATCAACGCTCGACAATCAA 2 я запутался с выводом, вот несколько строк, в этом первая - исходная последовательность, а число 3 имеет 1 несоответствие, а 2 - 2 несоответствия. я хочу, чтобы он печатал аналогичную последовательность (скажем, 0) и 1,2,3 последовательности несоответствия @Ashwini Chaudhary - person abh; 18.04.2013

Использование Python:

import re
seq="atcttgttcaatggccgatcaacggtcgacaatcaa"
D = [ c for c in seq ]
with open("input") as f:
    for line in f:
        line=line.rstrip('\n')
        if re.match(".{20}aacg", line):
            cnt = sum([ 1 for c,d in zip(line,D) if c != d])
            if cnt < 4:
                print cnt, line
person perreal    schedule 17.04.2013
comment
я только что посмотрел на некоторые выходные данные 1 ATCTTGTTCAATGGCCGATCAACGGCCGACAATCAA 2 ATCTTGTTCAATGGCCGATCAACGGTCGACAATCAA, но второй похож на последовательность, и он говорит мне, что 2 несоответствия, почему? - person abh; 18.04.2013
comment
в последовательности должно быть 2 несовпадения - person perreal; 18.04.2013
comment
original ATCTTGTTCAATGGCCGATCAACGGTCGACAATCAA 0 AGCTTGTTCAATGGCCGATCAACGGCCGACAATCAA 1 AGCTTGTTCAATGGCCGATCAACGGTCGACAATCAA 2 ATCTTGTTCAATGGCCGATCAACGGTCGACAATCAA 3 ATCTTGATCAATGGCCGATCAACGGTCGACAATCAA вот некоторые строки, которые я получил @perreal - person abh; 18.04.2013
comment
0, 2, 1, 0, 1 - это то, что я получаю для этих данных. - person perreal; 18.04.2013
comment
да. у меня то же самое. я просто хочу, чтобы если он найдет похожее, то последовательность несоответствия 0,1 с последовательностью несоответствия 1,2 с последовательностью несоответствия 2 и последовательностью несоответствия 3 с 3 @perreal - person abh; 18.04.2013
comment
извините, я не очень понимаю, что вы имеете в виду. Можешь еще раз попытаться объяснить? - person perreal; 18.04.2013

Использование модуля регулярных выражений Python позволяет указать количество несоответствий

import regex #intended as a replacement for re
from Bio import SeqIO
import collections

d = collections.defaultdict(list)
motif = r'((atcttgttcaatggccgatc)(....)(gtcgacaatcaa)){e<4}' #e<4 = less than 4 errors
records = list(SeqIO.parse(open(infile), "fastq"))
for record in records:
    seq = str(record.seq)
    match = regex.search(motif, seq, regex.BESTMATCH)
    barcode = match.group(3)
    sequence = match.group(0)
    d[barcode].append(sequence) # store as a dictionary key = barcode, value = list of sequences
for k, v in d.items():
    print("barcode = %s" % (k))
    for i in v:
        print("sequence = %s" % (i))

используя группы захвата, четвертая группа (3) будет штрих-кодом

person Colin Anthony    schedule 08.03.2017