斯德哥尔摩格式 (skbio.io.format.stockholm

斯德哥尔摩格式是一种多序列对齐格式(MSA),可以选择支持存储任意对齐特征(元数据)。特性可以分为四个不同的类别:GF、GS、GR和GC(下面将更详细地描述)。

斯德哥尔摩文件示例,摘自 [1]:

# STOCKHOLM 1.0
#=GF ID    UPSK
#=GF SE    Predicted; Infernal
#=GF SS    Published; PMID 9223489
#=GF RN    [1]
#=GF RM    9223489
#=GF RT    The role of the pseudoknot at the 3' end of turnip yellow mosaic
#=GF RT    virus RNA in minus-strand synthesis by the viral RNA-dependent RNA
#=GF RT    polymerase.
#=GF RA    Deiman BA, Kortlever RM, Pleij CW;
#=GF RL    J Virol 1997;71:5990-5996.
AF035635.1/619-641             UGAGUUCUCGAUCUCUAAAAUCG
M24804.1/82-104                UGAGUUCUCUAUCUCUAAAAUCG
J04373.1/6212-6234             UAAGUUCUCGAUCUUUAAAAUCG
M24803.1/1-23                  UAAGUUCUCGAUCUCUAAAAUCG
#=GC SS_cons                   .AAA....<<<<aaa....>>>>
//

格式支持

有嗅探员:是的

状态:从0.4.2开始实验。

读者

writer

对象类

是的

是的

skbio.alignment.TabularMSA

格式规范

斯德哥尔摩格式由页眉、多序列对齐、关联的元数据(功能)和页脚组成。

多序列比对

由一系列空格组成,后跟空格序列。例如::

seq1 ACG-T-GGT
seq2 ACCGTTCG-

序列名称 (seq1seq2 )存储在 TabularMSA index .

备注

scikit-bio目前支持读取斯德哥尔摩文件,其中每个序列都包含在一行中。不支持交错/环绕斯德哥尔摩文件。写的时候,每个序列都会放在自己的行上。

警告

序列名在斯德哥尔摩文件中必须是唯一的。同样,当从 TabularMSAindex 必须是独一无二的。

元数据

斯德哥尔摩文件支持存储关于MSA的任意元数据(特性)。以下各节中描述的所有元数据都是可选的,可以以任何顺序出现。元数据“标记”行以 #=GF#=GS#=GR#=GC ,每一行描述路线的一个特征。

备注

斯德哥尔摩格式支持通用功能。 [1][2] 提供Pfam/Rfam输出的通用特性列表。scikit-bio不需要这些特性。这些特性的处理方式与任何任意特性的处理方式相同,都是简单的字符串键值对。写入时,要素名称、要素数据和序列名称将转换为类型 str .

备注

在编写斯德哥尔摩文件时,scikit-bio将按建议的格式顺序放置元数据:

  • GF:定线上方

  • GS:对准上方(GF后)

  • GR:在相应的顺序下

  • GC:路线下方

GF元数据

与多序列比对作为一个整体有关的数据,如比对中的作者或序列数。开始于 #=GF 后跟功能名称和与功能相关的数据。通常在斯德哥尔摩的文件中排名第一。

例如(取自 [2]) :

#=GF DE CBS domain

哪里 DE 是功能名称,并且 CBS Domain 是要素数据。

GF元数据存储在 TabularMSA metadata 字典。

备注

读取时,重复的GF要素名称将按其在文件中出现的顺序连接其值。为了避免将单词连接在一起,串联还将在行间添加空格(如果行间没有空格)。写作时,每一个GF特征将被放在自己的行上,而不考虑长度。

备注

标记有 NH/TN 处理方式与其他GF功能不同。当阅读具有这些功能的斯德哥尔摩文件时,读者将遵循中描述的规则 [2]. 在多行上拆分的树将连接它们的值。与其他GF特性不同的是,树在连接时永远不会添加空格。

没有标识符的单个树将存储为:

metadata = {
    'NH': 'tree in NHX format'
}

具有标识符的单个树将存储为:

metadata = {
    'NH': {
        'tree-id': 'tree in NHX format'
    }
}

多个树(必须具有标识符)将存储为:

metadata = {
    'NH': {
        'tree-id-1': 'tree in NHX format',
        'tree-id-2': 'tree in NHX format'
    }
}

备注

标记为 RN/RM /RT`/``RA`/``RL/RC``的处理方式与其他GF功能不同。当阅读具有这些特性的斯德哥尔摩文件时,读者会填充一个字典列表,其中每个字典代表一个引用。列表中包含的引用的顺序与它们在文件中的显示顺序无关,而与提供的值无关 ``RN` . 如果引用不包括所有可能的引用标记(例如。 RC ,字典将只包含该引用的引用标记。写作时,作者加上参考号 (RN )写每个引用之前的行,例如:

#=GF RN [1]
#=GF RA Kestrel Gorlick
...
#=GF RN [2]
...

引用将存储为:

metadata = {
    'RN': [{
        'RM': 'reference medline',
        'RT': 'reference title',
        'RA': 'reference author',
        'RL': 'reference location',
        'RC': 'reference comment'
    }, {
        'RM': 'reference medline',
        ...
    }]
}

GS元数据

多序列比对中与特定序列有关的数据。开始于 #=GS 后跟序列名,然后是功能名称和与功能相关的数据。通常在斯德哥尔摩文件中的GF元数据之后。

例如(取自 [2]) :

#=GS O83071/259-312 AC O83071

哪里 O83071/259-312 是序列名称, AC 是功能名称,并且 083071 是要素数据。

GS元数据存储在特定序列中 metadata 字典。

备注

读取时,重复的GS要素名称将按照它们在文件中出现的顺序连接其值。为了避免将单词连接在一起,串联还将在行间添加空格(如果行间没有空格)。在编写时,每个GS特征将被放在自己的行上,而不考虑长度。

GR元数据

与多序列比对中特定序列的列有关的数据。开始于 #=GR 后跟序列名,后跟功能名称和与功能相关的数据,每列一个字符。通常在它相关的序列行之后。

例如(取自 [2]) :

#=GR O31698/18-71 SS    CCCHHHHHHHHHHHHHHH..EEEEEEEE....EEEEEEEEHHH

哪里 O31698/18-71 是序列名称, SS 是功能名称,并且 CCCHHHHHHHHHHHHHHH..EEEEEEEE....EEEEEEEEHHH 是要素数据。

GR元数据以特定顺序存储 positional_metadata .

备注

不允许将重复的GR功能名称归因于单个序列。

GC元数据

作为一个整体,与多序列对齐列相关的数据。开始于 #=GC 后跟功能名称和与功能相关的数据,每列一个字符。通常出现在多序列比对的末尾。

例如(取自 [2]) :

#=GC SS_cons            CCCCCHHHHHHHHHHHHH..EEEEEEEE....EEEEEEEEEEH

哪里 SS_cons 是功能名称,并且 CCCCCHHHHHHHHHHHHH..EEEEEEEE....EEEEEEEEEEH 是要素数据。

GC元数据存储在 TabularMSA positional_metadata .

备注

不允许重复的GC功能名称。

格式参数

唯一支持的格式参数是 constructor ,指定要将每个对齐序列读入的内存序列对象的类型。这必须是 GrammaredSequence (例如, DNARNAProtein )是必需的格式参数。例如,如果你知道你正在读的斯德哥尔摩文件包含DNA序列,你就可以通过 constructor=DNA 给读者打电话。

示例

假设我们有一个包含蛋白质序列的MSA的斯德哥尔摩文件(修改自 [2]) :

>>> import skbio.io
>>> from io import StringIO
>>> from skbio import Protein, TabularMSA
>>> fs = '\n'.join([
...         '# STOCKHOLM 1.0',
...         '#=GF CC CBS domains are small intracellular modules mostly'
...         ' found',
...         '#=GF CC in 2 or four copies within a protein.',
...         '#=GS O83071/192-246 AC O83071',
...         '#=GS O31698/88-139 OS Bacillus subtilis',
...         'O83071/192-246          MTCRAQLIAVPRASSLAE..AIACAQKM....RVSRV',
...         '#=GR O83071/192-246 SA  999887756453524252..55152525....36463',
...         'O83071/259-312          MQHVSAPVFVFECTRLAY..VQHKLRAH....SRAVA',
...         'O31698/18-71            MIEADKVAHVQVGNNLEH..ALLVLTKT....GYTAI',
...         'O31698/88-139           EVMLTDIPRLHINDPIMK..GFGMVINN......GFV',
...         'O31699/88-139           EVMLTDIPRLHINDPIMK..GFGMVINN......GFV',
...         '#=GR O31699/88-139 AS   ________________*____________________',
...         '#=GR O31699/88-139 IN   ____________1______________2_________',
...         '#=GC SS_cons            CCCCCHHHHHHHHHHHHH..EEEEEEEE....EEEEE',
...         '//'
...     ])
>>> fh = StringIO(fs)
>>> msa = TabularMSA.read(fh, constructor=Protein)
>>> msa 
TabularMSA[Protein]
----------------------------------------------------------------------
Metadata:
    'CC': 'CBS domains are small intracellular modules mostly found in
           2 or four copies within a protein.'
Positional metadata:
    'SS_cons': <dtype: object>
Stats:
    sequence count: 5
    position count: 37
----------------------------------------------------------------------
MTCRAQLIAVPRASSLAE..AIACAQKM....RVSRV
MQHVSAPVFVFECTRLAY..VQHKLRAH....SRAVA
MIEADKVAHVQVGNNLEH..ALLVLTKT....GYTAI
EVMLTDIPRLHINDPIMK..GFGMVINN......GFV
EVMLTDIPRLHINDPIMK..GFGMVINN......GFV

序列名存储在 index

>>> msa.index
Index(['O83071/192-246', 'O83071/259-312', 'O31698/18-71', 'O31698/88-139',
       'O31699/88-139'],
      dtype='object')

这个 TabularMSA GF元数据是否存储在其 metadata 字典:

>>> msa.metadata
OrderedDict([('CC', 'CBS domains are small intracellular modules mostly found in 2 or four copies within a protein.')])

GC元数据存储在 TabularMSA positional_metadata

>>> msa.positional_metadata  
   SS_cons
0        C
1        C
2        C
3        C
4        C
5        H
6        H
7        H
8        H
9        H
...

GS元数据存储在特定序列中 metadata 字典:

>>> msa[0].metadata
OrderedDict([('AC', 'O83071')])

GR元数据以特定顺序存储 positional_metadata

>>> msa[4].positional_metadata  
   AS IN
0   _  _
1   _  _
2   _  _
3   _  _
4   _  _
5   _  _
6   _  _
7   _  _
8   _  _
9   _  _
...

我们来写这个 TabularMSA 斯德哥尔摩格式:

>>> fh = StringIO()
>>> _ = msa.write(fh, format='stockholm')
>>> print(fh.getvalue())
# STOCKHOLM 1.0
#=GF CC CBS domains are small intracellular modules mostly found in 2 or four copies within a protein.
#=GS O83071/192-246 AC O83071
#=GS O31698/88-139 OS Bacillus subtilis
O83071/192-246         MTCRAQLIAVPRASSLAE..AIACAQKM....RVSRV
#=GR O83071/192-246 SA 999887756453524252..55152525....36463
O83071/259-312         MQHVSAPVFVFECTRLAY..VQHKLRAH....SRAVA
O31698/18-71           MIEADKVAHVQVGNNLEH..ALLVLTKT....GYTAI
O31698/88-139          EVMLTDIPRLHINDPIMK..GFGMVINN......GFV
O31699/88-139          EVMLTDIPRLHINDPIMK..GFGMVINN......GFV
#=GR O31699/88-139 AS  ________________*____________________
#=GR O31699/88-139 IN  ____________1______________2_________
#=GC SS_cons           CCCCCHHHHHHHHHHHHH..EEEEEEEE....EEEEE
//

>>> fh.close()

引用