Bio.AlignIO.StockholmIO模块

Bio.AlignIO支持“斯德哥尔摩”格式(在PFAM数据库中使用)。

您需要通过Bio.AlignIO函数使用此模块(如果您想要直接处理有间隙的序列,则通过Bio.SeqIO函数)。

例如,考虑包含以下内容的斯德哥尔摩路线文件:

# 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

大多数输出格式将无法保存斯德哥尔摩文件中可能的注释:

>>> 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 .................<<<<<<<<...<<<<<<<........>>>>>>>........<<<<<<<.......>>>>>>>..>>>>>>>>...............
//

请注意,在编写斯德哥尔摩文件时,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"]
'.......<<<'

您还可以在此部分对齐的斯德哥尔摩输出中看到这一点:

>>> 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

斯德哥尔摩/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加载到MultipleSeqAlignment对象。

该文件可能包含多条串联路线,这些路线以增量方式加载和返回。

此解析器将检测斯德哥尔摩文件是否遵循特定于序列的元数据的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和Emoss保持一致,我们将其称为“斯德哥尔摩”格式。

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__()

从句柄解析下一个对齐方式。