短核苷酸序列的Biopython blast参数

时间:2014-02-10 14:08:44

标签: python biopython blast ncbi

我正在尝试使用NCBIWWW通过biopython进行爆破 我在给定的示例文件中使用qblast函数 我定义了一些方法,当我的fasta包含足够长的序列时,一切都像魅力一样。它失败的唯一情况是当我需要来自Illumina测序的爆炸读数太短时。所以我想说这可能是因为在提交作品时没有自动重新定义爆破参数。

我尽我所能接近极短的条件(见here表C2)但没有成功。

看起来我无法输入正确的参数。

我认为我接近工作的情况越接近以下内容:

result_handle = NCBIWWW.qblast("blastn", "nr",
                                fastaSequence,
                                word_size=7,
                                gapcosts='5 2',
                                nucl_reward=1,
                                nucl_penalty='-3',
                                expect=1000)

感谢您提供任何有关其工作的提示/建议。

我的样本fasta读取如下:

>TEST 1-211670
AGACTGCGATCCGAACTGAGAAC

我得到的错误如下:

>ValueError: Error message from NCBI: Message ID#24 Error: Failed to read the Blast query: Protein FASTA provided for nucleotide sequence

当我看到this page时,似乎我的问题是关于修复阈值,但显然我到目前为止还没有成功。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

一旦我遇到爆破肽的问题,它似乎是一个适当的参数选择问题。我花了很长时间才发现它们实际上应该是什么(各种网站上的数据不一致和稀少,包括NCBI文档在这方面非常复杂)。我知道你对爆破核苷酸序列感兴趣,但据说你会找到你的解决方案,同时看看下面的代码。请特别注意para filtercomposition_based_statisticsword_sizematrix_name。在我看来,它们似乎至关重要。

blast_handle = NCBIWWW.qblast("blastp", "nr",
                              peptide_seq,
                              expect=200000.0,
                              filter=False,
                              word_size=2,
                              composition_based_statistics=False,
                              matrix_name="PAM30",
                              gapcosts="9 1",
                              hitlist_size=1000)

答案 1 :(得分:0)

此代码适用于我(Biopython 1.64):

from Bio.Blast import NCBIWWW

fastaSequence = ">TEST 1-211670\nAGACTGCGATCCGAACTGAGAAC"

result_handle = NCBIWWW.qblast("blastn", "nr",
                               fastaSequence,
                               word_size=7,
                               gapcosts='5 2',
                               nucl_reward=1,
                               nucl_penalty='-3',
                               expect=1000)

print result_handle.getvalue()

也许你传递了一个错误的fastaSequence。 Biopython不会从SeqRecords(或任何东西)到普通FASTA进行任何转换。您必须提供如上所示的查询。

Blast确定序列是读取前几个字符的核苷酸还是蛋白质。如果他们在" ACGT"高于阈值,它是核苷酸,否则它是蛋白质。因此,您的序列处于" ACGT"的100%阈值,不可能被解释为蛋白质。