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 的 annotations 字典中。整個比對的任何每列註釋都在比對的 column annotations 字典中,例如本範例中的二級結構共識
>>> 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)
-
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)
-
將 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__()
從 handle 剖析下一個比對。