Bio.SearchIO.ExonerateIO 包

子模块

模块内容

Bio.SearchIO 对 Exonerate 输出格式的支持。

此模块增加了对处理 Exonerate 输出的支持。Exonerate 是一种通用的成对序列比较工具,允许您使用几种不同的模型来比对序列。

Bio.SearchIO.ExonerateIO 在以下 Exonerate 版本和模型上进行了测试

  • 版本:2.2

  • 模型:- affine:local - cdna2genome - coding2coding - est2genome - genome2genome - ner - protein2dna - protein2genome - ungapped - ungapped:translated

虽然模型测试并不详尽,但 ExonerateIO 应该能够处理所有 Exonerate 模型。如果您遇到无法解析的文件,请提交错误报告。

有关 Exonerate 的更多信息,请访问其主页 www.ebi.ac.uk/~guy/exonerate/

支持的格式

  • 纯文本比对 - ‘exonerate-text’ - 解析,索引

  • Vulgar 行 - ‘exonerate-vulgar’ - 解析,索引

  • Cigar 行 - ‘exonerate-cigar’ - 解析,索引

在 Exonerate 中,这些输出格式不是相互排斥的。例如,您可能在同一个文件中同时拥有纯文本和 vulgar 输出。但是,ExonerateIO 只能一次处理其中的一种。例如,如果您有一个包含纯文本和 vulgar 行的文件,您必须选择 ‘exonerate-text’ 或 ‘exonerate-vulgar’ 来解析它。

由于 cigar 格式规范,比对的许多特征,如内含子或移码,可能会被折叠成一个特征(在这种情况下,它们被标记为 'D',表示 '删除')。解析器不会尝试猜测它遇到的 'D' 标签是真正的删除还是折叠的特征。因此,使用 'exonerate-cigar' 进行解析或索引可能会产生与 'exonerate-text' 或 'exonerate-vulgar' 不同的结果。

exonerate-text

纯文本输出/C4 比对是通过 '–showalignemnt' 标志触发的输出。与其他两种输出格式相比,此格式包含的信息最多,包含比对的完整查询和命中序列。

以下是 ExonerateIO 可以处理的 C4 输出比对的一些示例(坐标未按比例显示)

1. simple ungapped alignments

       1 : ATGGGCAATATCCTTCGGAAAGGTCAGCAAAT :      56
           ||||||||||||||||||||||||||||||||
 1319275 : ATGGGCAATATCCTTCGGAAAGGTCAGCAAAT : 1319220

2. alignments with frameshifts:

     129 : -TGCCGTTACCAT----GACGAAAGTATTAAT : 160
           -CysArgTyrHis----AspGluSerIleAsn
           #||||||||||||####|||||||||||||||
           #CysArgTyrHis####AspGluSerIleAsn
 1234593 : GTGCCGTTACCATCGGTGACGAAAGTATTAAT : 1234630

3. alignments with introns and split codons:

    382 :    {A}                             {CC}AAA                 :    358
          AAA{T}  >>>> Target Intron 3 >>>>  {hr}LysATGAGCGATGAAAATA
          || { }++         55423 bp        ++{  } !  |||  ||||||||||
          AAC{L}gt.........................ag{eu}AspTTGAATGATGAAAATA
  42322 :    {C}                             {TG}GAT                 :  97769

4. alignments with NER blocks

    111 : CAGAAAA--<   31  >--CTGCCCAGAAT--<   10  >--AACGAGCGTTCCG- :    184
          | |||||--< NER 1 >--| ||||| | |--< NER 2 >--|||  | ||||||-
 297911 : CTGAAAA--<   29  >--CCGCCCAAAGT--<   13  >--AACTGGAGTTCCG- : 297993

ExonerateIO 广泛利用 HSPFragment 模型来处理非无间隙比对。对于任何单个 HSPFragment,如果 ExonerateIO 看到内含子、NER 块或移码,它将把片段分解成两个 HSPFragment 对象,并相应地调整它们各自的开始和结束坐标。

您可能会注意到 Exonerate 始终使用三个字母的氨基酸代码来显示蛋白质序列。如果蛋白质本身是查询序列的一部分,例如在 protein2dna 模型中,ExonerateIO 将把蛋白质序列转换为使用一个字母的代码。这是因为用于存储序列的 SeqRecord 对象仅设计用于单字母序列。如果 Exonerate 还输出底层核苷酸序列,它将作为三联体列表存储在 aln_annotation 条目中。

如果蛋白质序列不是实际比对的一部分,例如在 est2genome 或 genome2genome 模型中,ExonerateIO 将保留三个字母代码,并将它们存储为 aln_annotation 条目。在这些情况下,命中序列和查询序列可以直接用作 SeqRecord 对象,因为它们是单字母核苷酸代码。然后,三个字母的蛋白质序列作为 aln_annotation 字典中的条目存储。

对于 'exonerate-text',ExonerateIO 提供以下对象属性

对象

属性

QueryResult

description

查询序列描述

id

查询序列 ID

model

比对模型

program

‘exonerate’

Hit

description

命中序列描述

id

命中序列 ID

HSP

hit_split_codons

命中序列中分割密码子的坐标列表

score

比对分数

query_split_codons

查询序列中分割密码子的坐标列表

HSPFragment

aln_annotation

比对相似性字符串、命中序列注释和/或查询序列注释

hit

命中序列

hit_end

命中序列结束坐标

hit_frame

命中序列阅读框架

hit_start

命中序列开始坐标

hit_strand

命中序列链

query

查询序列

query_end

查询序列结束坐标

query_frame

查询序列阅读框架

query_start

查询序列开始坐标

query_strand

查询序列链

请注意,您还可以使用默认的 HSP 或 HSPFragment 属性。例如,要检查结果的内含子坐标,您可以使用 query_inter_rangeshit_inter_ranges 属性

>>> from Bio import SearchIO
>>> fname = 'Exonerate/exn_22_m_genome2genome.exn'
>>> all_qresult = list(SearchIO.parse(fname, 'exonerate-text'))
>>> hsp = all_qresult[-1][-1][-1]   # last qresult, last hit, last hsp
>>> hsp
HSP(...)
>>> hsp.query_inter_ranges
[(388, 449), (284, 319), (198, 198), (114, 161)]
>>> hsp.hit_inter_ranges
[(487387, 641682), (386207, 487327), (208677, 386123), (71917, 208639)]

在这里,您可以看到,对于查询和命中内含子,每个元组中的坐标始终是 (start, end),其中 start <= end。但是,当您比较每个元组到下一个元组时,坐标会减小。这表明查询和命中序列都在负链上。Exonerate 以递减的方式输出负链结果;开始坐标始终大于结束坐标。ExonerateIO 保留片段的整体排序,但使用自己的标准来存储单个片段的开始和结束坐标。

您可能还会注意到 query_inter_ranges 中的第三个元组是 (198, 198),这两个数字完全相同。这意味着查询序列在该位置没有任何间隙。间隙仅存在于命中序列中,我们看到第三个元组包含 (208677, 386123),这是一个大约 177k 个碱基的间隙。

另一个示例是使用 hit_frame_allquery_frame_all 来查看您的比对中是否存在任何移码

>>> from Bio import SearchIO
>>> fname = 'Exonerate/exn_22_m_coding2coding_fshifts.exn'
>>> qresult = next(SearchIO.parse(fname, 'exonerate-text'))
>>> hsp = qresult[0][0]      # first hit, first hsp
>>> hsp
HSP(...)
>>> hsp.query_frame_all
[1, 2, 2, 2]
>>> hsp.hit_frame_all
[1, 1, 3, 1]

在这里,您可以看到整个比对有三个移码。第一个发生在查询序列中,在第一个片段之后(1 -> 2 移码),第二个发生在命中序列中,在第二个片段之后(1 -> 3 移码),最后一个也发生在命中序列中,在最后一个片段之前(3 -> 1 移码)。

您可以使用其他默认 HSP 属性来简化您的工作流程。有关更多详细信息,请参阅 HSP 对象文档。

exonerate-vulgar

vulgar 格式提供了一种紧凑的方式来表示由 Exonerate 创建的比对。通常,它包含与纯文本输出相同的信息,除了 'model' 信息和实际序列本身。您可以预期使用 'exonerate-text' 和 'exonerate-vulgar' 获得的坐标是相同的。两种格式还使用相同的触发器创建 HSPFragment:内含子、NER 块和/或移码。

exonerate-cigar

cigar 格式提供了一种更紧凑的 Exonerate 比对表示形式。但是,这样做会付出丢失信息的代价。例如,在 cigar 格式中,内含子被视为简单的删除。这使得解析器无法区分简单的删除或内含子区域。因此,'exonerate-cigar' 可能会产生与 'exonerate-vulgar' 或 'exonerate-text' 不同的坐标和片段集。