Перебор нескольких последовательностей из файла FASTA для получения наибольшей длины ORF - PullRequest
0 голосов
/ 15 апреля 2020

Я написал код для перебора файла FASTA, который работает нормально, но я получаю неправильную длину. Я не могу понять, как изменить оставшуюся часть кода, чтобы он давал наибольшее значение ORF из каждой последовательности, чтобы все ORF могли быть перечислены и затем отсортированы для получения наибольшей длины.

Код должен возвращать длину самого длинного ORF только из второй рамки считывания и только в направлении 3 '-> 5'.

После использования translate() для получения аминокислотных последовательностей из последовательностей ДНК Я использовал len(pro)*3+3, чтобы получить длины ORF. Я также пытался translate() с другими аргументами. Все еще получил неправильные результаты. Я не знаю, что не так с кодом. Ссылка на файл с последовательностями может быть найдена ниже следующего кода и вывода.

Код

from Bio import SeqIO
records = list(SeqIO.parse(r"file.fasta", "fasta"))
lengths = []
for record in records:
    table = 1
    min_pro_len = 100
    frame = 1
    longest = 0
    for strand, nuc in [(+1, record.seq)]:
        length = 3 * ((len(record)-frame) // 3) #Multiple of three
        for pro in nuc[frame:frame+length].translate(table).split("*"):
            if len(pro) >= min_pro_len and frame == 1:
                lengths.append(len(pro)*3+3)

Вывод, который я получаю

При вводе >>> print(sorted(lengths)) в оболочке Python выводится следующий вывод:

[303, 303, 306, 318, 339, 372, 384, 426, 429, 456, 471, 480, 489, 492, 546, 549, 570, 573, 576, 585, 660, 666, 684, 693, 810, 855, 945, 957, 1026, 1041, 1299, 1320, 1533, 1578, 1740, 1911]

FASTA-файл с последовательностями: sequences.fasta

...