我有一个脚本,它使用基因的位置和链信息(补体,前向)来提取核苷酸序列。提取后,该脚本使用翻译表和密码子起始位置将核苷酸序列转换为氨基酸序列并将其与原始氨基酸序列进行比较。理论上,他们应该匹配,但我还没有得到匹配。
例如,我将使用此E. 大肠杆菌 genbank文件:http://www.ncbi.nlm.nih.gov/nuccore/AB011549从第396行开始/接近以下内容:
CDS complement(25341..26294)
/gene="repFIB"
/note="Replication protein RepFIB (P307 replicon);
similar to PIR accession number A32310"
/codon_start=1
/transl_table=11
/product="RepFIB"
/protein_id="BAA31780.2"
/db_xref="GI:4589743"
/translation="MTLTPNNNNTVQPVALMRLGVFVPTLKSLKNSKKNTLSRTDATEELTRLSLARAEGFDKVEITGPRLDMDNDFKTWVGIIHSFARHNVIGDKVELPFVEFAKLCGIPSSQSSRRLRERISPSLKRIAGTVISFSRTDEKHTREYITHLVQSAYYDTERDIVQLQADPRLFELYQFDRKVLLQLKAINALKRRESAQALYTFIESLPRDPAPVSLARLRARLNLKSPVFSQNQTVRRAMEQLREIGYLDYTEIQRGRTKLFCIHYRRPRLKAPNDESKENPLPPSPAEKVSPEMAEKLALLEKLGITLDDLEKLFKSR"
这告诉我翻译表是#11,基因在25341位开始并在26294结束,基因来自补体链,实际氨基酸序列是最后一个条目(例如,/翻译)。
import Bio
import os
from Bio import GenBank
from Bio import SeqIO
from Bio import SeqFeature
genome_file = 'GenbankFiles_E_coli/AB011549.gb'
#complement strand
nAA = 'MTLTPNNNNTVQPVALMRLGVFVPTLKSLKNSKKNTLSRTDATEELTRLSLARAEGFDKVEITGPRLDMDNDFKTWVGIIHSFARHNVIGDKVELPFVEFAKLCGIPSSQSSRRLRERISPSLKRIAGTVISFSRTDEKHTREYITHLVQSAYYDTERDIVQLQADPRLFELYQFDRKVLLQLKAINALKRRESAQALYTFIESLPRDPAPVSLARLRARLNLKSPVFSQNQTVRRAMEQLREIGYLDYTEIQRGRTKLFCIHYRRPRLKAPNDESKENPLPPSPAEKVSPEMAEKLALLEKLGITLDDLEKLFKSR'
#Forward strand
NA = 'MLLALLSSTDNFCLSSTELSERLDVSRTYITRACDSLEKFGFIKRMESKEDRRSKNIYLTSDGNLYLQRTTRIYGRYLKKYGATLQMMKSKHLK'
gene_nucleotide = ''
def match(sequence, index):
print('match')
print(index, sequence)
exit()
def get_aminoAcid(nucleotide_sequence, amino_sequence, start_position, stop_position, string=''):
index = -2
calls = [nucleotide_sequence[start_position+index:stop_position+index].translate(table=11), nucleotide_sequence[start_position+index:stop_position+index].complement().translate(table=11), nucleotide_sequence[start_position+index:stop_position+index].reverse_complement().translate(table=11)]
while index < 3:
print(index)
stringT = str(nucleotide_sequence[start_position+index:stop_position+index].translate(table=11))
stringC = str(nucleotide_sequence[start_position+index:stop_position+index].complement().translate(table=11))
stringRC = str(nucleotide_sequence[start_position+index:stop_position+index].reverse_complement().translate(table=11))
if stringT == amino_sequence:
match(stringT, index)
if stringC == amino_sequence:
match(stringC, index)
if stringRC == amino_sequence:
match(stringRC, index)
#uncomment to see actual translations
#print('translate:', stringT, '\n')
#print('complement:', stringC, '\n')
#print('reverse_complement:', stringRC, '\n')
index+=1
record = next(SeqIO.parse(genome_file, 'genbank'))
sequence = record.seq
start = 25341
stop = 26294
get_aminoAcid(sequence, nAA, start, stop)
#This is from a forward strand
start = 23512
stop = 23796
get_aminoAcid(sequence, NA, start, stop)
请注意我的脚本会看到以下内容:正向链( .translate(table = 11)),补充链( .complement()。translate(table = 11))和反向补码(* .reverse_complement()。翻译(表= 11))。
即使genbank文件指出基因从位置25341开始并且在位置1具有开放阅读框(例如,codon_start = 1),我检查了从-2,-1,0开始读取帧的所有三个翻译(这是原始的起始位置),+ 1,+ 2 ......我仍然无法找到互补链的匹配。然而,该脚本确实适用于正向核苷酸链(参见最后几行使用不同编码序列的信息)。
这是我的输出:
/usr/local/anaconda3/lib/python3.4/site-packages/Bio/Seq.py:2041: BiopythonWarning: Partial codon, len(sequence) not a multiple of three. Explicitly trim the sequence or add trailing N before translation. This may become an error in future. BiopythonWarning)
-2
-1
0
1
2
-2 #starting over using different CDS (forward)
-1
match
-1 MLLALLSSTDNFCLSSTELSERLDVSRTYITRACDSLEKFGFIKRMESKEDRRSKNIYLTSDGNLYLQRTTRIYGRYLKKYGATLQMMKSKHL
因此,将正向链核苷酸序列转换为匹配的氨基酸序列是有效的,但补体不会,我无法弄清楚为什么(这可能是我在Biopython中犯的错误)。任何人都可以提供一些关于我做错了什么以及如何纠正它的见解吗?
关于核苷酸如何转化为氨基酸的非常简要解释:密码子/氨基酸由三个核苷酸组成。请看这里的氨基酸图表:How to complete getting substrings of a genome encoding a given amino acid sequence 如果我的核苷酸序列是GCG,从圆的中心开始并向边缘移动,G(内圆)C(中圆)G(外圆)对应于丙氨酸(A)。答案 0 :(得分:0)
我有点尴尬地说这个问题不是我的代码,而是我的解释。 CDS特征(例如CDS补体(xx ... xxxx))可以来自补体链,但是我不需要首先转换它(例如,reverse_complement(),complement())。我只是直接翻译它(例如,translate(table = 11))。
第一个或最后一个氨基酸可能存在一些问题(如评论中所述),但在大多数情况下,问题已解决。