Bio.AlignIO.StockholmIO 模块

Bio.AlignIO 对 “stockholm” 格式的支持(用于 PFAM 数据库)。

您应该通过 Bio.AlignIO 函数(如果您想直接使用间隙序列,则使用 Bio.SeqIO 函数)来使用此模块。

例如,考虑一个包含以下内容的 Stockholm 对齐文件

# STOCKHOLM 1.0
#=GC SS_cons       .................<<<<<<<<...<<<<<<<........>>>>>>>..
AP001509.1         UUAAUCGAGCUCAACACUCUUCGUAUAUCCUC-UCAAUAUGG-GAUGAGGGU
#=GR AP001509.1 SS -----------------<<<<<<<<---..<<-<<-------->>->>..--
AE007476.1         AAAAUUGAAUAUCGUUUUACUUGUUUAU-GUCGUGAAU-UGG-CACGA-CGU
#=GR AE007476.1 SS -----------------<<<<<<<<-----<<.<<-------->>.>>----

#=GC SS_cons       ......<<<<<<<.......>>>>>>>..>>>>>>>>...............
AP001509.1         CUCUAC-AGGUA-CCGUAAA-UACCUAGCUACGAAAAGAAUGCAGUUAAUGU
#=GR AP001509.1 SS -------<<<<<--------->>>>>--->>>>>>>>---------------
AE007476.1         UUCUACAAGGUG-CCGG-AA-CACCUAACAAUAAGUAAGUCAGCAGUGAGAU
#=GR AE007476.1 SS ------.<<<<<--------->>>>>.-->>>>>>>>---------------
//

这是一个单个多序列比对,因此您可能需要使用 Bio.AlignIO.read() 函数来加载它

>>> from Bio import AlignIO
>>> align = AlignIO.read("Stockholm/simple.sth", "stockholm")
>>> print(align)
Alignment with 2 rows and 104 columns
UUAAUCGAGCUCAACACUCUUCGUAUAUCCUC-UCAAUAUGG-G...UGU AP001509.1
AAAAUUGAAUAUCGUUUUACUUGUUUAU-GUCGUGAAU-UGG-C...GAU AE007476.1
>>> for record in align:
...     print("%s %i" % (record.id, len(record)))
AP001509.1 104
AE007476.1 104

除了序列本身之外,此示例比对还包含一些用于序列二级结构的 GR 行。这些是字符串,每个字符对应于关联序列中的每个字母

>>> for record in align:
...     print(record.id)
...     print(record.seq)
...     print(record.letter_annotations['secondary_structure'])
AP001509.1
UUAAUCGAGCUCAACACUCUUCGUAUAUCCUC-UCAAUAUGG-GAUGAGGGUCUCUAC-AGGUA-CCGUAAA-UACCUAGCUACGAAAAGAAUGCAGUUAAUGU
-----------------<<<<<<<<---..<<-<<-------->>->>..---------<<<<<--------->>>>>--->>>>>>>>---------------
AE007476.1
AAAAUUGAAUAUCGUUUUACUUGUUUAU-GUCGUGAAU-UGG-CACGA-CGUUUCUACAAGGUG-CCGG-AA-CACCUAACAAUAAGUAAGUCAGCAGUGAGAU
-----------------<<<<<<<<-----<<.<<-------->>.>>----------.<<<<<--------->>>>>.-->>>>>>>>---------------

每行的任何通用注释都记录在 SeqRecord 的注释字典中。整个比对的任何每列注释都位于比对的列注释字典中,例如此示例中的二级结构共识

>>> sorted(align.column_annotations.keys())
['secondary_structure']
>>> align.column_annotations["secondary_structure"]
'.................<<<<<<<<...<<<<<<<........>>>>>>>........<<<<<<<.......>>>>>>>..>>>>>>>>...............'

您可以使用 Bio.AlignIO.write() 或 MultipleSeqAlignment 对象的 format 方法将此比对输出为许多不同的文件格式

>>> print(format(align, "fasta"))
>AP001509.1
UUAAUCGAGCUCAACACUCUUCGUAUAUCCUC-UCAAUAUGG-GAUGAGGGUCUCUAC-A
GGUA-CCGUAAA-UACCUAGCUACGAAAAGAAUGCAGUUAAUGU
>AE007476.1
AAAAUUGAAUAUCGUUUUACUUGUUUAU-GUCGUGAAU-UGG-CACGA-CGUUUCUACAA
GGUG-CCGG-AA-CACCUAACAAUAAGUAAGUCAGCAGUGAGAU

大多数输出格式无法保存 Stockholm 文件中可能的注释

>>> print(format(align, "stockholm"))
# STOCKHOLM 1.0
#=GF SQ 2
AP001509.1 UUAAUCGAGCUCAACACUCUUCGUAUAUCCUC-UCAAUAUGG-GAUGAGGGUCUCUAC-AGGUA-CCGUAAA-UACCUAGCUACGAAAAGAAUGCAGUUAAUGU
#=GS AP001509.1 AC AP001509.1
#=GS AP001509.1 DE AP001509.1
#=GR AP001509.1 SS -----------------<<<<<<<<---..<<-<<-------->>->>..---------<<<<<--------->>>>>--->>>>>>>>---------------
AE007476.1 AAAAUUGAAUAUCGUUUUACUUGUUUAU-GUCGUGAAU-UGG-CACGA-CGUUUCUACAAGGUG-CCGG-AA-CACCUAACAAUAAGUAAGUCAGCAGUGAGAU
#=GS AE007476.1 AC AE007476.1
#=GS AE007476.1 DE AE007476.1
#=GR AE007476.1 SS -----------------<<<<<<<<-----<<.<<-------->>.>>----------.<<<<<--------->>>>>.-->>>>>>>>---------------
#=GC SS_cons .................<<<<<<<<...<<<<<<<........>>>>>>>........<<<<<<<.......>>>>>>>..>>>>>>>>...............
//

请注意,在写入 Stockholm 文件时,AlignIO 不会将长序列分解并交错(如上面显示的输入文件)。标准允许这种更简单的布局,并且更有可能被其他工具理解。

最后,作为旁注,有时使用 Bio.SeqIO.parse() 来迭代对齐行作为 SeqRecord 对象(而不是使用 Alignnment 对象)可能很有用。

>>> from Bio import SeqIO
>>> for record in SeqIO.parse("Stockholm/simple.sth", "stockholm"):
...     print(record.id)
...     print(record.seq)
...     print(record.letter_annotations['secondary_structure'])
AP001509.1
UUAAUCGAGCUCAACACUCUUCGUAUAUCCUC-UCAAUAUGG-GAUGAGGGUCUCUAC-AGGUA-CCGUAAA-UACCUAGCUACGAAAAGAAUGCAGUUAAUGU
-----------------<<<<<<<<---..<<-<<-------->>->>..---------<<<<<--------->>>>>--->>>>>>>>---------------
AE007476.1
AAAAUUGAAUAUCGUUUUACUUGUUUAU-GUCGUGAAU-UGG-CACGA-CGUUUCUACAAGGUG-CCGG-AA-CACCUAACAAUAAGUAAGUCAGCAGUGAGAU
-----------------<<<<<<<<-----<<.<<-------->>.>>----------.<<<<<--------->>>>>.-->>>>>>>>---------------

请记住,如果您对 SeqRecord 进行切片,那么此处类似二级结构字符串的每个字母注释也会被切片

>>> sub_record = record[10:20]
>>> print(sub_record.seq)
AUCGUUUUAC
>>> print(sub_record.letter_annotations['secondary_structure'])
-------<<<

同样,对于比对对象,只要您没有删除任何行,对比对的特定列进行切片就会切片任何每列注释

>>> align.column_annotations["secondary_structure"]
'.................<<<<<<<<...<<<<<<<........>>>>>>>........<<<<<<<.......>>>>>>>..>>>>>>>>...............'
>>> part_align = align[:,10:20]
>>> part_align.column_annotations["secondary_structure"]
'.......<<<'

您也可以在该部分比对的 Stockholm 输出中看到这一点

>>> print(format(part_align, "stockholm"))
# STOCKHOLM 1.0
#=GF SQ 2
AP001509.1 UCAACACUCU
#=GS AP001509.1 AC AP001509.1
#=GS AP001509.1 DE AP001509.1
#=GR AP001509.1 SS -------<<<
AE007476.1 AUCGUUUUAC
#=GS AE007476.1 AC AE007476.1
#=GS AE007476.1 DE AE007476.1
#=GR AE007476.1 SS -------<<<
#=GC SS_cons .......<<<
//
class Bio.AlignIO.StockholmIO.StockholmWriter(handle)

基类:SequentialAlignmentWriter

Stockholm/PFAM 对齐写入器。

pfam_gr_mapping = {'active_site': 'AS', 'intron': 'IN', 'ligand_binding': 'LI', 'posterior_probability': 'PP', 'secondary_structure': 'SS', 'surface_accessibility': 'SA', 'transmembrane': 'TM'}
pfam_gc_mapping = {'model_mask': 'MM', 'reference_annotation': 'RF'}
pfam_gs_mapping = {'look': 'LO', 'organism': 'OS', 'organism_classification': 'OC'}
write_alignment(alignment)

使用此方法将(另一个)单个比对写入打开的文件。

请注意,序列及其注释一起记录(而不是有一块注释后跟一块比对序列)。

class Bio.AlignIO.StockholmIO.StockholmIterator(handle, seq_count=None)

基类:AlignmentIterator

从 PFAM 中的 Stockholm 文件加载 MultipleSeqAlignment 对象。

该文件可能包含多个连接的比对,这些比对会逐个加载和返回。

此解析器将检测 Stockholm 文件是否遵循 PFAM 用于序列特定元数据的约定(以 #=GS 和 #=GR 开头的行),并相应地填充 SeqRecord 字段。

目前会忽略任何不遵循 PFAM 约定的注释。

如果为元数据中的条目提供了登录号,它将不会用作 record.id(它将记录在记录的注释中)。这是因为某些文件具有来自同一登录号的不同部分的(子)序列(通过不同的起始-结束位置区分)。

不支持环绕比对 - 每个序列必须位于单行上。但是,交错序列应该可以工作。

有关文件格式的更多信息,请参阅:http://sonnhammer.sbc.su.se/Stockholm.html https://en.wikipedia.org/wiki/Stockholm_format http://bioperl.org/formats/alignment_formats/Stockholm_multiple_alignment_format.html

为了与 BioPerl 和 EMBOSS 保持一致,我们将其称为 “stockholm” 格式。

pfam_gr_mapping = {'AS': 'active_site', 'IN': 'intron', 'LI': 'ligand_binding', 'PP': 'posterior_probability', 'SA': 'surface_accessibility', 'SS': 'secondary_structure', 'TM': 'transmembrane'}
pfam_gc_mapping = {'MM': 'model_mask', 'RF': 'reference_annotation'}
pfam_gs_mapping = {'LO': 'look', 'OC': 'organism_classification', 'OS': 'organism'}
__next__()

从句柄解析下一个比对。