FASTA序列格式说明

FASTA序列格式说明

 

高通量测序数据常采用 FASTQ 格式来保 存所测的碱基读段质量分数

如图 所示,FASTQ 格式以测序读段为单位存 储,每条读段占 4 行,

其中第一行和的第三行由文件识别标志和读段名(ID)组成(第一行以“@”开头而第三行以“+”开头;

第三行中 ID 可以省略,但“+”不能省 略),

第二行为碱基序列,第四行为各碱基所对应的测序质量分数序列。

这里写图片描述

 fasta序列格式是blast组织数据的基本格式,无论是数据库还是查询序列,大多数情况都使用fasta序列格式,所以首先对fasta格式在做详细说明。 下面是一个来源于NCBI的fasta格式序列:

>gi|187608668|ref|NM_001043364.2| Bombyx mori moricin (Mor), mRNA

AAACCGCGCAGTTATTTAAAATATGAATATTTTAAAACTTTTCTTTGTTTTTA

TTGTGGCAATGTCTCTGGTGTCATGTAGTACAGCCGCTCCAGCAAAAATACCT

ATCAAGGCCATTAAGACTGTAGGAAAGGCAGTCGGTAAAGGTCTAAGAGCCAT

CAATATCGCCAGTACAGCCAACGATGTTTTCAATTTCTTGAAACCGAAGAAAA

GAAAGCATTAAGAAAAGAAATTGAGTGAATGGTATTAGATATATTACTAAAGG

ATCGATCACAATGATATATAGATAGGTCATAGATGTCAACGTGAATTTATGGA

TTTTTGTTTTCCCCTTTGTAGTACTTACTTATAGTCAGTTCTTAAATTGATTG

CAACGACAACTGTGTACTATTTTTTATATTTGGTTCGAAAAGTTGCATTATTA

ACGATTTTAGAAAATAAAACTACTTTACTTTTACACG

     格式首先以大于号“>”开头,接着是序列的标识符“gi|187608668|ref|NM_001043364.2|”,然后是序列的描述信息。换行后是序列信息,标准核苷酸符号或氨基酸单字母符号。通常核苷酸符号大小写均可,而氨基酸一般用大写字母。文件中和每一行都不要超过80个字符(通常60个字符)。序列中允许空格,换行,空行,直到下一个大于号,表示该序列的结束。
     所有来源于NCBI的序列都有一个gi号“gi|gi_identifier”,gi号类似与数据库中的流水号,由数字组成,具有绝对唯一性。一条核酸或者蛋白质改变了,将赋予一个新的gi号(这时序列的接收号可能不变)。gi号后面是序列的标识符,下表是来源于不同数据库的标识符的说明。标识符由序列来源标识、序列标识(如接收号、名称等)等几部分组成,他们之间用“|”隔开,如果某项缺失,可以留空但是“|”不能省略。如上例中标识符为“ref|NM_001043364.2|”,表示序列来源于NCBI的参考序列库,接收号为“NM_001043364.2”。

对于自己构建的序列数据库(序列不是来源与NCBI或其他数据),可以采用“gnl|database|identifier”或者“lcl|identifier”格式,以保证可以使用blast的所有功能。database或者identifier是需要指定的数据库的标识和序列标识,指定的名称可以用大小写字母、数字、下划线“_”、破折号“-”或者点号“.”。注意名称是区分大小写的,同时不能出现空格,空格表示序列标识符结束。
数据库中的序列标识符必须保证唯一,许多时候格式数据库是formatdb报告错误,就是因为标示符重复,还有一点需要强调的是序列不能为空,否则也会报错。
下面是一个例子,这四个序列的标识符都是唯一。

  • gnl|H.sapiens|seq1
  • gnl|H.sapiens|seq2
  • gnl|M.Mus|seq1
  • lcl|seq1

 


表:序列来源的数据库与对应的标识符

 

Database Name数据库名称     Identifier Syntax 标识符
GenBankgb|accession|locus
EMBL Data Libraryemb|accession|locus
DDBJ, DNA Database of Japandbj|accession|locus
NBRF PIRpir||entry
Protein Research Foundationprf||name
SWISS-PROTsp|accession|entry name
Brookhaven Protein Data Bankpdb|entry|chain
Patentspat|country|number
GenInfo Backbone Idbbs|number
General database identifiergnl|database|identifier
NCBI Reference Sequenceref|accession|locus
Local Sequence identifierlcl|identifier

 

表:序列中的每个字母或字符所代表的含义。

核苷酸序列:
        A --> adenosine           M --> A C (amino)
        C --> cytidine            S --> G C (strong)
        G --> guanine             W --> A T (weak)
        T --> thymidine           B --> G T C
        U --> uridine             D --> G A T
        R --> G A (purine)        H --> A C T
        Y --> T C (pyrimidine)    V --> G C A
        K --> G T (keto)          N --> A G C T (any)
                                  -  gap of indeterminate length

氨基酸序列:
    A  alanine                         P  proline
    B  aspartate or asparagine         Q  glutamine
    C  cystine                         R  arginine
    D  aspartate                       S  serine
    E  glutamate                       T  threonine
    F  phenylalanine                   U  selenocysteine
    G  glycine                         V  valine
    H  histidine                       W  tryptophan
    I  isoleucine                      Y  tyrosine
    K  lysine                          Z  glutamate or glutamine
    L  leucine                         X  any
    M  methionine                      *  translation stop
    N  asparagine                      -  gap of indeterminate length

### FASTA 序列比对的计算复杂度分析 FASTA 是一种经典的序列比对算法,主要用于寻找两个生物序列之间的相似区域。其核心思想是通过快速扫描和优化策略来减少不必要的比较次数,从而提高效率。 #### 1. 基本原理与时间复杂度 FASTA 使用启发式方法来进行序列比对。它的主要过程可以分为以下几个部分: - **初步匹配阶段**:FASTA 首先会识别短片段(通常是 k-mer),并尝试找到这些片段在目标序列中的位置。这一阶段的时间复杂度通常为 \(O(n \cdot m / w)\),其中 \(n\) 和 \(m\) 分别表示查询序列和数据库序列长度,\(w\) 表示窗口大小[^1]。 - **扩展匹配阶段**:一旦找到了潜在的匹配片段,FASTA 将进一步扩展这些片段以评估更长的匹配可能性。此阶段涉及动态规划技术,因此对于每一对可能的匹配,其时间复杂度接近于 Smith-Waterman 算法的 \(O(n \times m)\)。 综合来看,由于初始筛选减少了需要进行详尽比对的数量,整体时间复杂度低于纯粹的动态规划方法。然而,具体性能取决于输入数据的特点以及参数设置。 #### 2. 空间复杂度考量 除了时间上的开销之外,空间需求也是衡量算法效能的重要指标之一。FASTA 在存储中间结果方面相对较为节省资源;不过当处理大规模或者多个序列的同时对比任务时,则仍需考虑内存占用情况如何影响最终表现效果[^2]。 以下是实现简单版本 fasta 比对逻辑的一个 Python 示例程序: ```python def fasta_align(seq1, seq2): from Bio import pairwise2 alignments = pairwise2.align.globalxx(seq1, seq2) best_alignment = alignments[0] align_seq1, align_seq2, score, begin, end = best_alignment return f"Alignment:\n{align_seq1}\n{align_seq2}\nScore:{score}" print(fasta_align("ATCG", "ACGT")) ``` 上述代码利用 Biopython 提供的功能完成两字符串间的全局最优配准操作,并返回相应分数作为评价标准的一部分展示出来。 #### 总结说明 综上所述,虽然理论上存在较高的最坏情形下的运行成本即 O(N*M), 实际应用过程中得益于多种剪枝手段使得平均执行速度远优于传统穷举方式。这使其成为早期探索基因组信息不可或缺的有效工具之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangchuang2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值