如何对基因组序列进行注释

2023-11-14

基因组组装完成后,或者是完成了草图,就不可避免遇到一个问题,需要对基因组序列进行注释。注释之前首先得构建基因模型,有三种策略:

  • 从头注释(de novo prediction):通过已有的概率模型来预测基因结构,在预测剪切位点和UTR区准确性较低
  • 同源预测(homology-based prediction):有一些基因蛋白在相近物种间的保守型搞,所以可以使用已有的高质量近缘物种注释信息通过序列联配的方式确定外显子边界和剪切位点
  • 基于转录组预测(transcriptome-based prediction):通过物种的RNA-seq数据辅助注释,能够较为准确的确定剪切位点和外显子区域。

每一种方法都有自己的优缺点,所以最后需要用EvidenceModeler(EVM)和GLEAN工具进行整合,合并成完整的基因结构。基于可靠的基因结构,后续可才是功能注释,蛋白功能域注释,基因本体论注释,通路注释等。

那么基因注释重要吗?可以说是非常重要了,尤其是高通量测序非常便宜的现在。你可以花不到一万的价格对600M的物种进行100X的普通文库测序,然后拼接出草图。但是这个草图的价值还需要你进行注释后才能显现出来。有可能你和诺贝尔奖就差一个注释的基因组。

基因注释的重要性

从案例中学习套路

陆地棉基因组注释

文章标题为“Sequencing of allotetraploid cotton (Gossypium hirsutum L. acc. TM-1) provides a resource for fiber improvement”.

同源注释:从Phytozome上下载了7个植物的基因组蛋白序列(Arabidopsis thaliana, Carica papaya, Glycine max, G. raimondii, Populus trichocarpa, Theobroma cacao and Vitis vinifera), 使用 TblastN 将蛋白序列比对到组装序列上,E-value的阈值为1e-5. 将不同蛋白的BLAST的hits用 Solar 软件进行合并。GeneWise 根据每个BLAST hit的对应基因区域预测完整的基因结构。

从头预测:先得构建repeat-mask genome, 在这个基础上就用 August, Genescan, GlimmerHMM, GeneidSNAP 预测编码区

转录组预测:用Tophat将RNA-seq数据比对到组装序列上,然后用cufflinks组装转录本形成基因模型。

综上,使用 EvidenceModeler(EVM) 将上面的结果组装成非冗余的基因结构。进一步根据Cscore > 0.5,peptide coverage > 0.5 和CDS overlaping with TE进行筛选。还有过滤掉超过30%编码区被Pfam或Interprot TE domain的注释的基因模型。

这些基因模型使用BLASTP进行功能注释,所用数据库为SWiss-Prot和TrEMBL.蛋白功能使用InterProScan和HMMER注释,数据库为InterPro和Pfam。GO注释则是直接雇佣InterPro和Pfam注释得到的对应entry。通路注释使用KEGG数据库。

Cardamine hirsuta基因组注释

文章标题为“The Cardamine hirsuta genome offers insight into the evolution of morphological diversity”。

同源注释:使用 GenomeThreader 以拟南芥为剪切模型,以及PlantsGDB resourc上 Brassica rapa (v1.1), A. thaliana(TAIR10), A. lyrata (v6), tomato (v3.6), poplar (v2) 和 A. thaliana (version PUT-169), B. napus (version PUT-172) EST assemblies 的完整的代表性蛋白集。

转录本预测: 将 C. hirsuta RNA-seq数据比对到基因序列,然后用cufflinks拼接

从头预测:转录本预测得到的潜在蛋白编码转录本使用网页工具 ORFpredictor 进行预测, 同时用 blastxA. thalina 进行比较,选择90%序列相似度和最高5%长度差异的部分从而保证保留完整的编码框(有启动子和终止子)。 这些基因模型根据相互之间的相似度和重叠度进行聚类,高度相似(>95)从聚类中剔除,保证非冗余训练集。为了训练gene finder, 它们选随机选取了2000个位点,20%是单个外显子基因。从头预测工具为 August , GlimmerHMM, GeneidSNAP . 此外还用了Fgenesh+, 以双子叶特异矩阵为参数进行预测。

最后使用JIGSAW算法根据以上结果进行训练,随后再次用JIGSAW对每个基因模型计算统计学权重。

可变剪切模型则是基于苗、叶、花和果实的RNA-seq比对组装结果。

GO注释使用AHRD流程

小结

举的2个例子都是植物,主要是植物基因组不仅是组装,注释都是一大难题。因为植物基因组有大量的重复区,假基因,还有很多新的蛋白编码基因和非编码基因,比如说玉米基因组80%以上都是重复区域。然后当我检索这两篇文章所用工具的时候,我不经意或者说不可避免就遇到了这个网站 http://www.plantgdb.org/ , 一个整合植物基因组学工具和资源的网站,但是这个网站似乎2年没有更新了。当然这个网站也挺不错,http://bioservices.usd.edu/gsap.html, 他给出了一套完整的注释流程以及每一步的输入和输出情况。

此外,2017年在《Briefings in Bioinformatics》发表的"Plant genome and transcriptome annotations: from misconceptions to simple solution" 则是从五个角度对植物基因组注释做了很完整的总结

  • 植物科学的常见本体
  • 功能注释的常用数据库和资源
  • 已注释的植物基因组意味着什么
  • 一个自动化注释流程
  • 一个参考流程图,用来说明使用公用数据库注释植物基因组/转录组的常规步骤
注释流程图

以上,通过套路我们对整个基因组注释有一个大概的了解,后续就需要通过实际操作来理解细节。

基因组注释

当我们谈到基因注释的时候,我们通常认为注释是指“对基因功能的描述”,比如说A基因在细胞的那个部分,通过招募B来调控C,从而引起病变。但是基因结构也是注释的一种形式,而且是先决条件,也就是在看似随机的ATCG的碱基排列中找到特殊的部分,而这些特殊的区域有着不一样的功能。

gene structure

在正式启动基因组注释项目之前,需要先检查组装是否合格,比如contig N50的长度是否大于基因的平均长度,使用BUSCO/CEGMA检查基因的完整性,如果不满足要求,可能输出结果中大部分的contig中都不存在一个完整的基因结构。当组装得到的contig符合要求时,就可以开始基因组注释环节,这一步分为三步:基因结构预测,基因功能注释,可视化和质控。

基因组结构注释

基因结构注释应是功能注释的先决条件,完整的真核生物基因组注释流程需要如下步骤:

  1. 必要的基因组重复序列屏蔽
  2. 从头寻找基因, 可用工具为: GeneMarkHMM, FGENESH, Augustus, SNAP, GlimmerHMM, Genscan
  3. 同源蛋白预测, 内含子分析: GeneWIse, Exonerate, GenomeThreader
  4. 将EST序列,全长cDNA序列和Trinity/Cufflinks/Stringtie组装的转录组和基因组联配
  5. 如果第4步用到了多个数据来源,使用PASA基于重叠情况进行联配
  6. 使用EvidenceModler根据上述结果进行整合
  7. 使用PASA更新EVM的一致性预测,增加UTR注释和可变剪切注释
  8. 必要的人工检查

基本上是套路化的分析流程,也就有一些工具通过整合几步开发了流程管理工具,比如说BRAKER结合了GeneMark和Augustus,MAKER2整合了SNAP,Exonerate,虽然BRAKER说自己的效果比MAKER2好,但是用的人似乎不多,根据web of knowledge统计,两者的引用率分别是44,283, 当然BRAKER是2016,MAKER2是2011,后者在时间上有优势。

这里准备先按部就班的按照流程进行注释,所用的数据是 Cardamine hirsuta , 数据下载方式如下

# Cardamine hirsutat基因组数据
mkdir chi_annotation && cd chi_annotation
wget http://chi.mpipz.mpg.de/download/sequences/chi_v1.fa
cat chi_v1.fa | tr 'atcg' 'ATCG' > chi_unmasked.fa
# 注释结果
wget http://chi.mpipz.mpg.de/download/annotations/carhr38.gff
# Cardamine hirsutat转录组数据
mkdir rna-seq && cd rna-seq
wget -4 -q -A '*.fastq.gz' -np -nd -r 2 http://chi.mpipz.mpg.de/download/fruit_rnaseq/cardamine_hirsuta/ &
wget -4 -q -A '*.fastq.gz' -np -nd -r 2 http://chi.mpipz.mpg.de/download/leaf_rnaseq/cardamine_hirsuta/ &

软件安装不在正文中出现,会放在附录中,除了某些特别复杂的软件。

01-重复序列屏蔽

重复屏蔽:真核生物的基因组存在大量的重复序列,植物基因组的重复序列甚至可以高达80%。尽管重复序列对维持染色体的空间结构、基因的表达调控、遗传重组等都具有重要作用,但是却会导致BLAST的结果出现大量假阳性,增加基因结构的预测的计算压力甚至影响注释正确性。基因组中的重复按照序列特征可以分为两类:串联重复(tandem repeats)和散在重复(interspersed repeats).

人类中的重复序列划分

鉴定基因组重复区域的方法有两种:一种基于文库(library)的同源(homology)方法,该文库收集了其他物种的某一种重复的一致性序列,通过相似性来鉴定重复;另一种是从头预测(de novo),将序列和自己比较或者是高频K-mer来鉴定重复。

目前重复序列注释主要软件就是RepeatMasker和RepeatModel。这里要注意分析的fasta的ID不能过长,不然会报错。如果序列ID过长可以使用bioawk进行转换,后续用到RepatModel不支持多行存放序列的fasta格式。

直接使用同源注释工具RepeatMasker寻找重复序列:

mkdir 00-RepeatMask
~/opt/biosoft/RepeatMasker/RepeatMasker -e ncbi -species arabidopsis -pa 40 -gff -dir 00-RepeatMask/ chi_unmasked.fa
# -e ncbi
# -species 选择物种 用~/opt/biosoft/RepeatMasker/util/queryRepeatDatabase.pl -tree 了解
# -lib 增加额外数据库,
# -pa 并行计算
# -gff 输出gff注释
# -dir 输出路径
# annotation with the library produced by RepeatModel

输出结果中主要关注如下三个(其中xxx表示一类文件名)

  • xxx.fa.masked, 将重复序列用N代替
  • xxx.fa.out.gff, 以gff2形式存放重复序列出现的位置
  • xxx.fa.tbl, 该文件记录着分类信息
cat 00-RepeatMask/chi_unmasked.fa.tbl
==================================================
file name: chi_unmasked.fa
sequences:           624
total length:  198654690 bp  (191241357 bp excl N/X-runs)
GC level:         35.24 %
bases masked:   35410625 bp ( 17.83 %)
========&
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对基因组序列进行注释 的相关文章

  • 如何使用 API 和 C# 将文件从 azure DevOps 服务器下载到指定路径

    我正在尝试使用 API 从 azure Devops 服务器下载文件 API 给出了成功响应 但是没有下载任何文件 如果我们删除格式参数 我们将获得带有文件链接的响应 单击该文件不会下载 示例代码 var personalaccesstok
  • 如何在 Visual Studio 2013 中隐藏未提交的更改

    需要一些帮助 了解如何使用 Visual Studio 2013 搁置 Git 存储库中未提交的更改 我来自 PHPStorm 您可以在一个分支上搁置未提交的更改 切换到另一个分支并取消搁置 但是 我无法找到 了解如何在 Visual St
  • 如何损坏 Git 存储库?

    创建损坏的 git 存储库有哪些方法 有没有有趣的方法可以永久损坏 git 存储库 你能否削弱一个 git 存储库 使其行为有些正常 但会做一些奇怪的事情 我的兴趣来自于当有人担心他们是否真的创建了不可恢复的状态时 它通常很容易修复或至少可
  • git 克隆错误:致命:git upload-pack:由于远程端可能的存储库损坏而中止

    我对 git 存储库具有读 写访问权限 但是当我尝试 git clone 时 出现以下错误 x ubuntu temp git clone email protected cdn cgi l email protection Corp ap
  • 将 svn 存储库添加到现有的 git 存储库中?

    我知道你可以使用 git svn init 来跟踪 svn 存储库 但这是为了你想创建一个全新的存储库 我的情况是 我目前已经有一个现有的 git 存储库 并且希望通过将 svn 存储库设为我当前 git 存储库中的远程分支来跟踪 svn
  • 如何获取第一次提交的 Git diff?

    我创建了一个存储库 在其中创建了一个文件 在文件中放入了一些内容 然后提交了该文件 现在 我想查看该提交的差异 理想情况下应该显示添加的文件以及添加到其中的行 然而 git diff HEAD HEAD回报fatal ambiguous a
  • 本地git,推送到tfs远程repo

    我厌倦了向我的队友解释使用 DVCS 相对于 CVCS 的好处 他们中的一些人害怕学习曲线 另一些人则看不出任何原因 因为对他们来说 这都是一样的 就我个人而言 我对 TFS 及其问题感到非常厌倦 每当我需要进行一些小的 修复 时 我都必须
  • 如何标记单个文件?或如何下载特定文件? - 胃肠道

    我想向文件添加标签以轻松下载该文件而不是整个分支 如何下载GIT中的特定文件 我不知道有什么方法可以标记特定文件git 对于第二个问题 如何下载特定文件git 仅当您的意思是 同时下载 时 以下内容才有效in a git存储库 这就是我理解
  • Git 中的“分支提示”是什么?

    我正在学习 Git 并阅读专业 Git 书籍 https git scm com book en v2 书中和 Stack Overflow 上有时会使用术语 分支提示 但我找不到它的含义 分支提示是分支上的最后一次提交或最近一次提交 基本
  • Git 在推送代码时返回错误 403 [重复]

    这个问题在这里已经有答案了 一切都工作正常 直到我创建了一个新的 GitHub 帐户 当我尝试使用新帐户第一次将代码推送到 github 服务器时 出现以下错误 remote Permission to NEW USER NEW REPO
  • hg 或 git 中的两个完整目录/项目之间存在差异?

    我继承了一个最初存储在 CVS 中的项目以及所有修订 我做了相当多的编辑 并且我试图比较我在原始目录中所做的所有更改 关于添加的新文件与旧文件 hg git 是否有某种实用程序可以让我进行树差异或类似性质的操作 也就是说 新添加的文件 删除
  • Git 中的合并冲突是由什么构成的?

    git 如何确定特定合并存在冲突以及冲突是什么 我的猜测是这样的 如果正在合并的两个提交有一个共同的父提交 并且如果它们都更改了父提交的 X 行 那就是冲突 让我的理解变得复杂的是 更改 X 行 可能意味着用几行新行替换它 但这仍然显示为一
  • 通过链接进入 git-repo,无需冗长的对话框

    In a directory I have symbolic links into a git administered directory all under Linux Every time I want to e dit such a
  • 当出现错误时如何删除远程分支?

    我尝试过以下命令 但失败了 git push origin next remote error denying ref deletion for refs heads next To blah git remote rejected nex
  • 是否可以在 git 存储库之外添加和提交文件?

    我们的文本文件分布在系统的各个角落 我们计划将这些文件中所做的所有修改添加到 git 存储库中 每次对这些文件进行修改都是由脚本进行的 因此 我们计划向该脚本添加新命令 以将文件添加到 git 存储库 但是 这些修改是同时进行的 我们可以为
  • Visual Studio Code 内置故事,用于查看 git 提交历史记录并对其内容进行比较

    In this https stackoverflow com questions 37899765 how can i view the git history in visual studio code 60013101 noredir
  • 在 Web 应用程序中显示最新的提交值?

    我有一些 Rails 应用程序 我使用 Git 作为版本控制系统 我使用 GitHub 或 Beanstalk 作为存储库主机 从理论上讲 我想要做的事情非常简单 以某种方式在 Web 应用程序的页脚中显示最新的提交 ID 号 哈希值 这样
  • Git:压缩 master 上提交的最简单方法[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 git 将最后 X 次提交压缩在一起 https stackoverflow com questions 5189560 how can i squash my last x commits
  • 致命:不是 git 存储库(或任何父目录):.git [重复]

    这个问题在这里已经有答案了 当我尝试推送 github com 上的现有存储库时 当我输入命令时 网站提示我将其输入终端 我收到了以下致命错误消息 Not a git repository or any of the parent dire
  • 如何将 GIT 调用的输出获取到批处理脚本中的变量中?

    我有一个 git 命令来获取当前存储库的最新 SHA 如下所示 git log pretty format H n 1 我有一个 Windows 批处理脚本 我想按如下方式使用它 SET CURRENT SHA 但我不知道如何将从 git

随机推荐

  • C语言【求最大公约数、最小公倍数】详解

    题目 从键盘输入两个数字 并求出他们的最大公约数 解题思路 一 当我们看到题目时 首先思考求什么是最大公约数 什么 是最小公倍数 最大公约数 指两个或两个以上共有的约数中最大的那个 最小公倍数 指两个或两个以上共有的倍数中最小的那个 接下来
  • Firewalld防火墙转换成Iptables

    关闭及停止使用 firewalld systemctl mask firewalld systemctl stop firewalld 安装iptables yum install y iptables services 生效及iptabl
  • Java海龟画图turtle多彩螺旋线

    利用turtle画多彩螺旋线 思路 在画正多边形的基础上 步长不是一直相同 而是越来越长 并且角度比画正多边形需要的角度多一些 每次拐弯变换颜色 Size是螺旋的大小 Step的每一步的长度 每走一步拐弯一次 Densi是密度 角度越小 螺
  • 【C++11】 列表初始化 auto 范围for 新增关键字 新增容器

    文章目录 1 列表初始化 2 auto 范围for 3 新增关键字 3 1 decltype 3 2 default 3 3 delete 3 4 final与override 4 总结 1 列表初始化 由c语言的规则我们知道 一般只有数组
  • 【Linux】基础:线程的概念

    Linux 基础 线程的概念 摘要 本文介绍Linux下的线程概念 首先将会线程在系列教材中的定义进行抛出 从常规的操作系统进行理解线程的概念 在具体说明Linux下的进线程的管理与组织方式 以及由于该组织方式的差异 导致的接口和资源的特殊
  • C语言实现仿射密码体制

    算法思想 1 通过用户输入的加密函数的斜率和截距 a与b 可以利用a计算出a的逆源 在输入a之后 要判断a与26是否互素 即a值与26的最大公约数为1 代码中采用辗转相除法 如果不符合要求 请提示重新输入 求解a的逆源 例如7的逆源是15
  • Unity连接服务器实现用户登录注册

    仅个人记录 方便以后忘掉回来看看 服务器买的是腾讯云的 系统是 CentOS 管理工具用的是万胜云面板 好像也叫宝塔 数据库都是在这里面整的 用到的表提前在里面创建好了 using MySql Data MySqlClient using
  • 阿里云ECS服务器1核2G能跑centos8.2系统吗?

    可以的 LInux系统的优点就在这些方面的 他不会随着系统的升级 导致服务器的配置过低从而不够用等情况 简单说就是不会太费系统资源的 阿里云ecs服务器centos系统还是算比较轻量级的了 本身对系统资源的占用并不高的 但是如果你使用win
  • C++中public、protected、private的区别

    1 访问范围 private public protected的访问范围 private 只能由该类中的函数 其友元函数访问 不能被任何其他访问 该类的对象也不能访问 protected 可以被该类中的函数 子类的函数 以及其友元函数访问
  • js作用域链

    简单的理解什么是作用域链 一级一级向上查询所以父级对象的变量的这个过程就是作用域链 下面我们来详细了解一下 变量作用域 在js中 变量分为全局变量和局部变量 全局变量的作用域是全局的 在任意地方都是被定义的 而局部变量可以是函数的参数 函数
  • 【Flutter 2-5】Flutter手把手教程UI布局和Widget——TextField使用、搭配InputDecoration和FocusedNode使用

    作者 弗拉德 来源 弗拉德 公众号 fulade me TextField TextField是一个常用的控件 同时它也是一个组合控件 由多个控件组合而成 这是来自Material官方网站的的图片 TextField是由7个控件组成 其中有
  • el-table排序

    排序有三种状态 默认不排序 升序 降序 如果要改变设置默认状态 用 default sort prop controlStatus order ascending 设置排序字段 sort by sortControlStatusArr 可以
  • 第四章 KubeSphere3.3.0 + Redis7.0.4 + Redis-Cluster 集群部署

    第四章 KubeSphere3 3 0 Redis7 0 4 Redis Cluster 集群部署 文章目录 第四章 KubeSphere3 3 0 Redis7 0 4 Redis Cluster 集群部署 前言 一 创建redis存储卷
  • java使用Ucloud对象存储

    最近研究了Ucloud的对象存储 使用起来很简单 总结一下 1 配置UFile 官网上下载下来的SDK jar包和测试类都包含在其中 结合到项目中 有重复的jar包 要选一留下 不要都留 配置文档的配置 UCloudPublicKey HL
  • 【Android】Exam8 多线程

    文章目录 实验目的 题目 Code 实验目的 掌握采用Handler Thread编写多线程序 掌握AsyncTask编写多线程序的方法 题目 采用Handler Thread多线程方式编写程序一个模拟从网络下载文件的程序 点击 点击加载
  • 使用OpenCV工具包成功实现人脸检测与人脸识别,包括传统视觉和深度学习方法(附完整代码,吐血整理......)

    使用OpenCV工具包实现人脸检测与人脸识别 吐血整理 OpenCV实现人脸检测 OpenCV人脸检测方法 基于Haar特征的人脸检测 Haar级联检测器预训练模型下载 Haar 级联分类器 OpenCV Python实现 基于深度学习的人
  • sklearn pip install 安装失败

    看机器学习教程用sklearn然后我pip install 无论怎么安装都是失败的 后来查了一下之后发现是sklearn更名为scikit learn pip install scikit learn 就可以得到sklearn 库啦
  • Maven打包时去掉版本号及assembly id

    1 去掉版本号 在工程build配置中设置finalName project artifactId
  • sivalco使用测试pin正向导通

    在学完功率半导体器件后 为了能够更好的了解功率半导体器件内部的相关性质 于是利用sivalco软件进行仿真 对于器件工作时相关数据进行分析 对于相关语句进行学习 在功率半导体中以N或者P半导体进行掺杂获得我们所需要的器件 利用网格定义掺杂浓
  • 如何对基因组序列进行注释

    基因组组装完成后 或者是完成了草图 就不可避免遇到一个问题 需要对基因组序列进行注释 注释之前首先得构建基因模型 有三种策略 从头注释 de novo prediction 通过已有的概率模型来预测基因结构 在预测剪切位点和UTR区准确性较