Мне нужно преобразовать контиги в соответствующие им последовательности белков с учетом эталонного генома (т.е. мне нужно взять подстроку, положение которой уже известно в строке, и мне нужно найти ближайшие стартовый и стоп-кодоны - конкретный 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 частисам код, но я не уверен, как занять позицию на строке (т.е. начальные точки контига) и посмотреть вдоль строки, чтобы найти ближайшие старт-стоп-кодоны, чтобы я мог определить функцию ДНК и точно упорядочить белоккодирование контигов в пептиды.
Любая помощь будет оценена!