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

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(使用前将#替换为@)

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

  • Git 更改丢失 - 为什么?

    我们的开发团队正在使用 git 最近我们至少两次丢失了文件更改 我们正在使用私人 Github 存储库 在当前情况下 我们可以返回 Github 上的日志并查看我对文件所做的一些更新 后来 另一位团队成员更改了文件的不同部分 它似乎破坏了我
  • `git push` -- 没有输出,什么也没有发生

    touch test git add test git commit m test git push u origin master 这奏效了 该文件已上传到存储库 rm test cp R website website git rm t
  • git 2.32 git push -u origin master 没有任何反应

    I ve starting to use git github and I m stucked on how to push my codes to github I m following some tutorials and when
  • MSysGit 与 Windows 版 Git

    我无法确定MSysGit 和 Windows 版 Git 之间的区别 http msysgit github com 它们有何不同 为什么我会选择其中之一而不是另一个 它们不是同一个东西吗 On http msysgit github co
  • 使用Git记录文件复制操作

    当我使用 git mv 在 git 中移动文件时 状态显示该文件已被重命名 即使我更改了某些部分 它仍然被认为几乎是相同的东西 这很好 因为它让我可以跟踪它的历史记录 当我复制文件时 原始文件有一些历史记录 我想将其与新副本关联起来 我尝试
  • 在我的例子中,GIT 添加恢复(保留更改)

    在我对文件进行更改之后 我用git add FILE NAME 然后 我想将其恢复为未添加但与此同时保留更改 这个怎么做 git reset FILE NAME会做的 See the git reset manual https git s
  • 在推送后检索孤立的提交对象 --force

    Doing push force总是有点冒险 这里有一个例子 说明它如何产生一些问题 例如远程丢失修订版本 假设 有一个人Bob已更新远程master分支来自B to C 还有另外一个人Mike还没有获取此更新并且HEAD of his m
  • GitLab:无法将代码推送到服务器?

    我已经在 Ubuntu 服务器上安装了 GitLab 一切似乎都工作正常 除了我无法向服务器推送 拉取 克隆 当我按下时 我收到一般错误消息 fatal Could not read from remote repository Pleas
  • 如何仅根据拉取请求在 Jenkins 中运行阶段?

    我现在有一个基于 Jenkinsfile 的管道 其中包含多个阶段 每次提交到 Github 时都会由 webhook 触发 我想在每次提交时保持 构建 和 单元测试 阶段运行 但仅在分支准备拉取请求时运行 集成测试 阶段 我想要的是 st
  • git push --force-with-lease 总是安全吗?

    我一直遵循的规则是 一旦 git 历史记录被推送到远程存储库 就不再修改它 但我想知道交互式变基到推送 force with lease 是否绕过了这条规则 如果强制租约成功 对其他用户来说是否完全安全 或者此策略有任何注意事项吗 预先感谢
  • 仅使用 git 存储未暂存的更改(不是 --keep-index)

    首先 我确实知道 keep index 这不是我想要的 因为它仍然隐藏着all更改 但将暂存的更改保留在工作树中 如果可能的话 我只想存储未暂存的文件 而无需再次添加所有更改git stash patch 如果您想存储索引 已暂存的内容 和
  • 在 Windows 下克隆 git repo 时,出现“错误:无法创建文件 <文件>...(是目录)”

    Z gt git clone git github com kennethreitz httpbin git Cloning into httpbin remote Counting objects 1073 done remote Com
  • 如果 git 凭证管理器显示令牌,它如何安全

    I have credential helper manager core 这是 Windows 凭据管理器的新助手 我不明白如果你可以让 git 显示你的凭据 它如何安全git credential fill 重现步骤 通过执行命令确认凭
  • 如何应用 .diff 文件

    我有一个 diff 类型文件 看起来像爆炸了 diff git a res User lua b res User lua index db8c2cc 4d2af0f 100644 a res User lua b res User lua
  • 使用 ssh-keygen 创建 SSH 密钥不会创建 .ssh 文件夹

    我正在尝试使用 msysgit 创建我的公共 私有 rsa 密钥对 我运行这个命令 ssh keygen C email protected cdn cgi l email protection t rsa 一切看起来都很好 我收到消息了
  • 如何从现有存储库中的分支创建新的 GitHub 存储库?

    I have master and 新项目分支机构 现在我想创建一个全新的存储库及其基于新项目分支的主存储库 背景 我有一个存储库 其中包含三个独立的应用程序 事情并不是这样开始的 仓库中最初只有一个应用程序 然而 随着时间的推移 业务需求
  • git Push Remote:警告:hooks.mailinglist 有多个值

    我刚刚从使用 gitosis 升级到 gitolite 电子邮件通知适用于所有存储库 但对于 gitolite admin 存储库 我在推送时收到此警告 推送很好 git push remote warning hooks announce
  • 如何在 Windows 上使用 cygwin、git bash 和 vagrant VM 中的 git 设置 git?

    My Setup 我们在工作中使用 Windows 10 我的任务是使用 Vagrant 构建一个我们都想使用的开发虚拟机 我们通过 Vagrant SSH 挂载将 git 文件夹挂载到虚拟机中 目前效果非常好 我们还使用 Visual S
  • Git:repo 包含一个空目录 - 会发生什么?

    Git 跟踪文件 而不是目录 https stackoverflow com questions 5091017 和我们目前不能add空目录 https stackoverflow com questions 11600188 The 标准
  • 设置 Git osxkeychain 错误

    我正在设置 Git 并且正在关注http lifehacker com 5983680 how the heck do i use github http lifehacker com 5983680 how the heck do i u

随机推荐

  • 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区准确性较