基因注释:基于SNAP+Augustus+GeneMark的maker3 pipeline

我使用的maker版本为3.01.04

第一轮:将已知基因比对到基因组

包括两个部分:
🔸屏蔽重复序列
🔸将已知的转录组/蛋白序列与基因组进行比对

1.(可选)构建自定义重复序列数据库

安装RepeatModeler
RepeatModeler Download Page (repeatmasker.org)
RepeatModeler的安装(包含RepeatMasker安装)_nnnnnnny-的博客-CSDN博客_repeatmodeler安装

/path/RepeatModeler/BuildDatabase -name pyu pyu_contig.fasta
RepeatModeler -pa 4 -database pyu -LTRStruct >& repeatmodeler.log

运行结束后获得pyu-families.fa,将其提供给maker_opts.ctl文件的“rmlib= ”选项

2.创建maker控制文件
maker -CTL
#将创建三个控制文件:maker_boopts.ctl、maker_exe.ctl、maker_opts.ctl
3.修改控制文件maker_opts.ctl
vi maker_opts.ctl

genome=pyu_contig.fasta

est=unigene.fasta #从头组装的转录组序列
protein=protein.fasta #uniprot中下载的同源蛋白序列

rmlib=pyu-families.fa
softmask=1 #软屏蔽,将重复序列转为小写而不是N,因此基因内的短重复序列仍然可以作为基因的一部分进行注释

est2genome=1 #使用转录组证据
protein2genome=1 #使用同源蛋白证据

TMP=/workdir/tmp  #对于大型基因组来说很重要

🔹如果单独运行RepeatMasker,如https://gist.github.com/darencard/bb1001ac1532dd4225b030cf0cd61ce2
中所述,“rmlib”选项应不填,“rm_gff”选项应该填写重复序列的gff文件

maker -base pyu_rnd1 maker_opts.ctl maker_bopts.ctl maker_exe.ctl
第二轮——使用SNAP进行基因预测
1.训练SNAP基因模型

首先使用上一轮产生的比对结果进行训练

mkdir SNAP1
cd SNAP1
gff3_merge -d ../pyu_rnd1.maker.output/pyu_rnd1_master_datastore_index.log
maker2zff -l 50 -x 0.5 pyu_rnd1.all.gff

🔹maker2zff生成一个ZFF格式文件(genome.ann)和一个FASTA格式文件(genome.dna),过滤用于再次训练的高置信度基因,共有7个选项:
-c 由EST/mRNA-Seq比对确定的剪接位点的比例,默认0.5
-e 与EST/mRNA-Seq比对重叠的外显子的比例,默认0.5
-o 和任何证据(EST或者蛋白)重叠的外显子的比例,默认0.5
-a 从头预测证实的剪接位点的比例,默认0
-t 和从头预测结果重叠的外显子的比例,默认0
-l mRNA翻译的蛋白质序列的最短长度
-x 最大AED值,默认0.5
-n 不过滤
🔸AED值:maker2使用注释编辑距离(AED)来评估基因组注释的准确性,AED是一个介于 0 和 1 之间的数字,衡量注释与支持它的evidence的拟合优度,0 表示与可用证据完全一致,1 表示缺乏对注释基因模型的支持

fathom -categorize 1000 genome.ann genome.dna #过滤
fathom -export 1000 -plus uni.ann uni.dna
forge export.ann export.dna
hmm-assembler.pl pyu . > ../pyu1.hmm
mv pyu_rnd1.all.gff ../
cd ..
2.使用SNAP预测基因

为第一轮的maker_opts.ctl 保存副本

cp maker_opts.ctl maker_opts.ctl_backup_rnd1

编辑第二轮的maker_opts.ctl

vi maker_opts.ctl 

maker_gff= pyu_rnd1.all.gff
est_pass=1 # 使用第一轮的EST比对结果
protein_pass=1 #使用第一轮的protein比对结果
rm_pass=1 # 使用gff文件中的repeats
snaphmm=pyu1.hmm
est= # 删除est文件,这一步不需要再跑EST比对了
protein= # 同上
model_org= #同上
rmlib= # 同上
repeat_protein= #同上
est2genome=0 # 不需要再构建基于EST证据的基因模型
protein2genome=0 #同上
pred_stats=1 #report AED stats
alt_splice=0 # 0: keep one isoform per gene; 1: identify splicing variants of the same gene
keep_preds=1 # keep genes even without evidence support, set to 0 if no

运行maker

maker -base pyu_rnd2 maker_opts.ctl maker_bopts.ctl maker_exe.ctl
第三轮——重新训练SNAP模型并进行另一轮SNAP基因预测

SNAP一共需要运行2~3轮
1.首先训练一个新的SNAP模型

mkdir SNAP2
cd SNAP2
gff3_merge -d ../pyu_rnd2.maker.output/pyu_rnd2_master_datastore_index.log
maker2zff -l 50 -x 0.5 pyu_rnd2.all.gff

fathom -categorize 1000 genome.ann genome.dna
fathom -export 1000 -plus uni.ann uni.dna
forge export.ann export.dna
hmm-assembler.pl pyu . > ../pyu2.hmm
mv pyu_rnd2.all.gff ..
cd ..

2.使用SNAP预测基因
为第二轮的maker_opts.ctl 保存副本

cp maker_opts.ctl maker_opts.ctl_backup_rnd2

编辑第三轮的maker_opts.ctl

vi maker_opts.ctl 

maker_gff=pyu_rnd2.all.gff
snaphmm=pyu2.hmm

运行maker

maker -base pyu_rnd3 maker_opts.ctl maker_bopts.ctl maker_exe.ctl
第四轮——训练AUGUSTUS模型
1.格式转换
mkdir augustus1
cd augustus1
gff3_merge -d ../pyu_rnd1.maker.output/pyu_rnd1_master_datastore_index.log

过滤gff文件,只保留maker注释

awk '{if ($2=="maker") print }' pyu_rnd1.all.gff > maker_rnd1.gff

将maker_rnd1.gff和pyu_contig.fasta转为Genbank格式的文件pyu.gb
保留每个基因上下游2000bp的序列用于训练模型

gff2gbSmallDNA.pl maker_rnd1.gff pyu_contig.fasta 2000 pyu.gb

检查训练集中的基因数目

grep -c LOCUS pyu.gb 
2.开始训练

首先创建一个Augustus新物种

new_species.pl --species=pyu

初始训练

etraining --species=pyu pyu.gb

检查初始模型是否存在

ls -ort $AUGUSTUS_CONFIG_PATH/species/pyu

创建一个更小的测试集pyu.gb.evaluation,便于在优化前后进行评估

randomSplit.pl pyu.gb 200
mv pyu.gb.test pyu.gb.evaluation

预测测试集中的基因,并检查结果

augustus --species=pyu pyu.gb.evaluation >& first_evaluate.out
grep -A 22 Evaluation first_evaluate.out

示例:

*******      Evaluation of gene prediction     *******

---------------------------------------------\
                 | sensitivity | specificity |
---------------------------------------------|
nucleotide level |       0.873 |       0.626 |
---------------------------------------------/

----------------------------------------------------------------------------------------------------------\
           |  #pred |  #anno |      |    FP = false pos. |    FN = false neg. |             |             |
           | total/ | total/ |   TP |--------------------|--------------------| sensitivity | specificity |
           | unique | unique |      | part | ovlp | wrng | part | ovlp | wrng |             |             |
----------------------------------------------------------------------------------------------------------|
           |        |        |      |                253 |                101 |             |             |
exon level |    484 |    332 |  231 | ------------------ | ------------------ |       0.696 |       0.477 |
           |    484 |    332 |      |   35 |    0 |  218 |   36 |    0 |   65 |             |             |
----------------------------------------------------------------------------------------------------------/

----------------------------------------------------------------------------\
transcript | #pred | #anno |   TP |   FP |   FN | sensitivity | specificity |
----------------------------------------------------------------------------|
gene level |   156 |   100 |   47 |  109 |   53 |        0.47 |       0.301 |
----------------------------------------------------------------------------/

🔸100个基因中有47个被准确预测
🔸69.6%的外显子被准确预测
🔸47.7%预测的外显子在测试集中确切存在

优化模型,该步骤极其耗时

randomSplit.pl pyu.gb 1000
optimize_augustus.pl --species=pyu --kfold=24 --cpus=24 --rounds=3 --onlytrain=pyu.gb.train pyu.gb.test 

优化后再次训练

etraining --species=pyu pyu.gb

使用优化后的模型评估测试集,并检查结果

augustus --species=pyu pyu.gb.evaluation >& second_evaluate.out
grep -A 22 Evaluation second_evaluate.out

在这些步骤之后,物种模型位于目录 augustus_config/species/pyu 中

3.使用新的 augustus 模型运行 maker
vi maker_opts.ctl

maker_gff= pyu_rnd1.all.gff
est_pass=1 # use est alignment from round 1
protein_pass=1 #use protein alignment from round 1
rm_pass=1 # use repeats in the gff file
augustus_species=pyu # augustus species model you just built
est= # remove est file, do not run EST blast again
protein= # remove protein file, do not run blast again
model_org= #remove repeat mask model, so not running RM again
rmlib= # not running repeat masking again
repeat_protein= #not running repeat masking again
est2genome=0 # do not do EST evidence based gene model
protein2genome=0 # do not do protein based gene model.
pred_stats=1 #report AED stats
alt_splice=0 # 0: keep one isoform per gene; 1: identify splicing variants of the same gene
keep_preds=1 # keep genes even without evidence support, set to 0 if no
maker -base pyu_rnd4 maker_opts.ctl maker_bopts.ctl maker_exe.ctl
第五轮——训练GeneMark

GeneMark训练只需要基因组组装文件

gmes_petap.pl -ES -fungus -cores 10 -sequence pyu_contig.fasta

将生成的gmhmm.mod添加到maker_opts.ctl文件中

vi maker_opts.ctl

gmhmm=gmhmm.mod

最后一次运行maker

maker -base pyu_rnd5 maker_opts.ctl maker_bopts.ctl maker_exe.ctl
六、最后的整合
gff3_merge -n -d ../pyu_rnd5.maker.output/pyu_rnd5_master_datastore_index.log
fasta_merge -d pyu_rnd5.maker.output/pyu_rnd5_master_datastore_index.log

获得一个不包含基因组序列的gff3 文件:pyu_rnd5.all.gff,以及一系列蛋白质和转录组fasta 文件。

maker最终结果

tips:要使基因名称更短,可使用以下命令:
maker_map_ids --prefix pyu_ --justify 8 --iterate 1 pyu_rnd5.all.gff > id_map
map_gff_ids id_map pyu_rnd5.all.gff
map_fasta_ids id_map pyu_rnd5.all.maker.proteins.fasta
map_fasta_ids id_map pyu_rnd5.all.maker.transcripts.fasta
参考文章:https://biohpc.cornell.edu/doc/annotation_2019_exercises1_v2.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容