Поиск ближайшей последовательности в строке - PullRequest
0 голосов
/ 21 октября 2018

Мне нужно преобразовать контиги в соответствующие им последовательности белков с учетом эталонного генома (т.е. мне нужно взять подстроку, положение которой уже известно в строке, и мне нужно найти ближайшие стартовый и стоп-кодоны - конкретный 3последовательность букв, как написано в коде).

Это сложно, потому что иногда первая позиция контига не будет кратна трем (т.е. первые три нуклеотида в контиге могут не полностью соответствовать кодону).Также иногда контиги могут быть расположены в межгенной области (то есть между генами).Цель состоит в том, чтобы отделить как кодирующую, так и некодирующую ДНК.

Пока это мой код:

from Bio.Seq import Seq
from Bio.Alphabet import generic_dna, generic_protein

start_codons = ['ATG']
stop_codons = ['TAG', 'TAA', 'TGA']

string = 'GG*TAG*CCAATT*ATG*AACGAA*TAG*GAC' #remove '*', just for visual
contigs = ['CCAA', 'TGAAC', 'GAA', 'GGAC']
positions = [5, 12, 17, 22] #position indices for each contig on string

extended_contigs = []
extended_position_contigs = []
intergenic_contigs = []
intergenic_position_contigs = []
for i in contigs:
    extended_contigs.append(#some code)
    extended_positions_contigs.append(#some code)
    intergenic_contigs.append(#some code)
    intergenic_positions_contigs.append(#some code)

Я должен получить extended_contigs = ['ATGAAC', 'ATGAACGAA'] и extended_positions_contigs = [12, 17].Это контиги, которые находятся внутри генов.Чтобы закодировать их в пептиды, мне нужно вернуться в строку, пока я не найду стартовый кодон и не расширим начальный контиг (например, TGAAC -> ATGAAC и GAA -> ATGAACGAA)

Я также должен получить intergenic_contigs = ['CCAA', 'GGAC'] и intergenic_positions_contigs = [5, 22].Когда пропущенный код выполняется, компьютер выполняет поиск слева от строки и находит стоп-кодон (например, TAG) перед стартовым кодоном.Таким образом, контиг расположен между двумя генами, и ничего не нужно добавлять.Эти межгенные контиги просто сохраняются в новом списке.

Мой код продолжается:

prot_contigs = []
for i in extended_contigs:
    my_dna = Seq(i, generic_dna)
    my_prot = my_dna.translate()
    prot_contigs.append(str(my_prot))

Здесь новый код добавлять не нужно.После запуска вышеуказанного, prot_contigs = ['MN', 'MNE'].

Последний шаг кода (с которым мне нужна помощь) преобразует prot_contigs в new_prot_contigs = ['MN', 'E'].

Как?Если для какого-либо контига (например, 'TGAAC') начало или конец является частью другого кодона (не идеально кратного 3), будет сохраняться дополнительный кодон на любом конце (например, 'MN' остается 'MN').В противном случае, если контиг (например, 'GAA') идеально соответствует кодону, все, что было добавлено на него, будет удалено (например, 'MNE' становится 'E').

Я бы попытался решить 2 частисам код, но я не уверен, как занять позицию на строке (т.е. начальные точки контига) и посмотреть вдоль строки, чтобы найти ближайшие старт-стоп-кодоны, чтобы я мог определить функцию ДНК и точно упорядочить белоккодирование контигов в пептиды.

Любая помощь будет оценена!

1 Ответ

0 голосов
/ 29 октября 2018

Этот ответ, кажется, был дан ответ раньше

Как найти открытую рамку для чтения в Python

Но вам действительно не нужно делать это самостоятельно (если вы действительно не хотите).Есть много инструментов, которые могут сделать это легко.Пример из EMBOSS Suite.

getorf -find 3 genome.fna genome.orf

Думаю, будет сложнее сделать это, если вы работаете в системе Windows, но подумайте над тем, чтобы сделать это в среде виртуальной коробки.В настоящее время большая часть биоинформатики делается на Unix-системах.

...