基因组结构注释实战:整合从头注释与同源预测的完整流程
基因组结构注释是解析基因功能、揭示物种遗传特征的核心步骤,其核心目标是精准识别基因组中的基因位置、外显子 - 内含子边界、UTR 区域等关键结构。常见的注释策略主要分为三类,本文将聚焦无转录组数据场景,详细讲解如何整合从头注释 与同源预测的主流工具,完成标准化的基因组结构注释流程。
一、基因组注释核心策略概述
1. 三大注释策略对比
| 注释类型 | 核心原理 | 优势 | 不足 |
|---|---|---|---|
| 从头注释(de novo prediction) | 基于已有的概率模型(如密码子偏好性、剪接位点特征)预测基因结构 | 不依赖外部数据,适用于无参考信息的新物种 | 剪切位点和 UTR 区预测准确性较低,易受重复序列干扰 |
| 同源预测(homology-based prediction) | 利用近缘物种的高质量注释信息(基因 / 蛋白序列),通过序列联配确定外显子边界 | 注释准确性高,尤其适用于保守基因 | 依赖近缘物种的优质注释资源,难以预测物种特有基因 |
| 基于转录组预测(transcriptome-based prediction) | 利用 RNA-seq 数据辅助定位基因表达区域 | 可精准确定剪切位点和外显子结构 | 需额外的转录组测序数据,实验成本高 |
2. 本文方案选择
由于无转录组数据支持,本文采用「从头注释 + 同源预测」的整合方案,结合 6 款主流工具的优势,提升注释准确性:
- 从头注释工具:AUGUSTUS(精度最高)、Geneid、GeneMark-ES(无需外部训练集)
- 同源预测工具:GeMoMa(多参考物种支持)、GenomeThreader、Exonerate(蛋白比对效率高)
- 结果整合工具:EvidenceModeler(EVM,整合多来源证据,生成最优注释集)
二、环境准备与软件安装
所有工具优先通过 Conda 安装(简化依赖管理),部分无 Conda 包的工具通过源码编译或 Docker 安装,以下是详细步骤(均在 Linux 服务器环境下测试)。
2.1 统一安装目录与环境变量
建议创建专用软件目录,方便管理并添加环境变量:
# 创建软件安装目录
mkdir -p /data/cm/software && cd /data/cm/software
# 后续工具均安装在此目录下
2.2 工具安装详情
(1)AUGUSTUS v2.5.5(从头注释核心工具)
# Conda安装(推荐,自动解决依赖)
conda install -c bioconda augustus -y
# 验证安装:查看支持的物种模型
augustus --species=help
(2)Geneid v1.4(从头注释工具,无 Conda 包)
# 从GitHub下载源码
git clone https://github.com/guigolab/geneid.git
cd geneid
# 编译(需提前安装gcc)
make
# 添加环境变量(永久生效)
echo 'export PATH="/data/cm/software/geneid/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# 验证安装
geneid -h
(3)GeneMark-ES v4.69_lic(从头注释工具,自训练)
conda install -c thiesgehrmann genemark_es -y
# 验证安装
gmes_petap.pl -h
(4)GeMoMa v1.9(同源预测工具)
conda install -c bioconda gemoma -y
# 验证安装(查看jar包路径,后续运行需指定)
find ~ -name "GeMoMa-*.jar" # 通常在conda环境的share目录下
(5)GenomeThreader v1.7.3(同源预测工具)
# 从官网下载Linux版本(需注册账号)
# 下载地址:https://genomethreader.org/downloads.html
wget https://genomethreader.org/distributions/gth-1.7.3-Linux_x86_64-64bit.tar.gz
tar zxf gth-1.7.3-Linux_x86_64-64bit.tar.gz
# 添加环境变量(指定bin目录、bssm和gthdata路径)
echo 'export PATH="/data/cm/software/gth-1.7.3-Linux_x86_64-64bit/bin:$PATH"' >> ~/.bashrc
echo 'export BSSMDIR="/data/cm/software/gth-1.7.3-Linux_x86_64-64bit/bin/bssm"' >> ~/.bashrc
echo 'export GTHDATADIR="/data/cm/software/gth-1.7.3-Linux_x86_64-64bit/bin/gthdata"' >> ~/.bashrc
source ~/.bashrc
# 验证安装
gth -h
(6)Exonerate v2.4.0(同源预测工具)
conda install -c bioconda exonerate -y
# 验证安装
exonerate --help
(7)EvidenceModeler(EVM,结果整合工具)
# 从GitHub下载源码(含格式转换脚本)
git clone https://github.com/EVidenceModeler/EVidenceModeler.git
cd EVidenceModeler
# 解压依赖脚本
tar zxf EvmUtils.tar.gz
# 添加环境变量(方便调用转换脚本)
echo 'export PATH="/data/cm/software/EVidenceModeler/EvmUtils:$PATH"' >> ~/.bashrc
source ~/.bashrc
# 验证:查看格式转换脚本
ls /data/cm/software/EVidenceModeler/EvmUtils/misc
三、前置准备工作
3.1 目录结构设计
为避免文件混乱,创建统一的工作目录,目录结构如下:
prediction/
├── augustus/ # AUGUSTUS输出结果
├── gemoma/ # GeMoMa输出结果
├── geneid/ # Geneid输出结果
├── gmes/ # GeneMark-ES输出结果
├── gth/ # GenomeThreader输出结果
├── exo/ # Exonerate输出结果
├── evm/ # EVM整合结果
├── results/ # 最终输出文件
└── weights.txt # EVM权重配置文件
创建命令:
mkdir -p prediction/{augustus,gemoma,geneid,gmes,gth,exo,evm,results}
cd prediction
3.2 输入文件准备
需准备以下核心文件(本文以隐孢子虫为例):
- 目标基因组:待注释的 FASTA 格式核苷酸文件(如
Cpar.fa) - 参考物种数据(同源预测用):
- 近缘物种 1(安氏隐孢子虫):基因组 FASTA + GFF 注释文件
- 近缘物种 2(鼠隐孢子虫):基因组 FASTA + GFF 注释文件 + 蛋白序列 FASTA
- 注:参考物种需选择与目标物种亲缘关系近、注释质量高的物种(如 CryptoDB 数据库下载寄生虫注释数据)
3.3 基因组序列预处理
(1)重复序列屏蔽(可选)
若基因组较大(>100Mb),需用 RepeatMasker 屏蔽重复序列,避免干扰基因预测:
# 安装RepeatMasker(Conda)
conda install -c bioconda repeatmasker -y
# 运行屏蔽(需指定物种,如--species human)
RepeatMasker -species your_species -xsmall target_genome.fasta
本文因基因组较小(隐孢子虫基因组~9Mb),跳过此步骤。
(2)序列 ID 简化处理
复杂的序列 ID(含空格、特殊字符)可能导致工具报错,用 Python 脚本简化:
# 脚本:fasta_id_sim.py
#!/usr/bin/env python
import sys
import pysam # 需安装:pip install pysam
with pysam.FastxFile(sys.argv[1]) as fh:
for r in fh:
# 保留序列ID的第一部分(去除空格后的前缀)
new_name = r.name.split(' ')[0]
print(f">{new_name}")
print(r.sequence)
运行脚本批量处理:
# 对所有FASTA文件进行ID简化
ls *.fasta | cut -d "." -f1 | while read id; do
python fasta_id_sim.py ${id}.fasta > ${id}_sim.fasta
done
# 后续分析使用简化后的文件(后缀_sim.fasta)
四、分步运行注释工具
4.1 从头注释工具运行
(1)AUGUSTUS:从头注释精度标杆
AUGUSTUS 需先通过近缘物种的注释数据训练模型,再用于目标基因组预测。
① 训练物种模型
# 利用近缘物种(如安氏隐孢子虫)的基因组和GFF注释训练模型
nohup autoAugTrain.pl \
--genome=/biodata/cm/reference/Cand/CryptoDB-59_Candersoni30847_Genome.fasta \
--trainingset=/biodata/cm/reference/Cand/CryptoDB-59_Candersoni30847.gff \
--species=Cand & # 自定义物种名(后续预测需用到)
# 注:训练时间约2-6小时(取决于基因组大小),用nohup后台运行
② 目标基因组预测
# 批量处理所有目标基因组(简化后的FASTA文件)
ls *_sim.fasta | cut -d "." -f1 | while read id; do
nohup augustus \
--species=Cand \ # 上一步训练的物种名
--gff3=on \ # 输出GFF3格式(便于后续整合)
${id}_sim.fasta > augustus/${id}_aug.gff &
done
③ 格式转换(适配 EVM)
AUGUSTUS 输出的 GFF3 需转为 EVM 兼容格式:
ls *_sim.fasta | cut -d "." -f1 | while read id; do
augustus_GFF3_to_EVM_GFF3.pl \
augustus/${id}_aug.gff > augustus/${id}_aug_gene.gff
done
(2)Geneid:需手动训练的从头注释工具
Geneid 无目标物种模型时,需通过 Docker 脚本训练(推荐用 WSL 或 Linux Docker 环境)。
① 训练 Geneid 模型(Docker 方式)
# 1. 下载训练脚本
git clone https://github.com/fcamara7/GeneidTRAINerDocker.git
cd GeneidTRAINerDocker
# 2. 构建Docker镜像(需提前安装Docker)
docker build -t geneidtrainerdocker .
# 3. 预处理GFF文件(保留CDS和基因ID,参考脚本示例)
# 输入GFF格式要求:最后一列仅保留基因ID(如asmbl10981m3600)
# 示例格式:scaffold222 transdecoder CDS 294413 294689 . + . asmbl10981m3600
# 4. 运行Docker训练
docker run -u $(id -u):$(id -g) \
-v /root/geneid_training/Cand:/data \ # 本地输入输出目录挂载
-w /data geneidtrainerdocker \
-species Cand \ # 物种名
-gff ./input/Cand.gff2 \ # 预处理后的GFF文件
-fastas ./input/Cand_genome.fasta \ # 参考物种基因组
-results ./output/ \ # 训练结果输出目录
-reduced no
# 5. 提取训练结果:output目录下的Cand.geneid.param
② 目标基因组预测
# 批量预测
ls *_sim.fasta | cut -d "." -f1 | while read id; do
nohup geneid \
-3 \ # 输出GFF3格式
-P /root/geneid_training/Cand/output/Cand.geneid.param \ # 训练参数文件
${id}_sim.fasta > geneid/${id}_gi_gene.gff &
done
# 注:Geneid输出格式默认兼容EVM,可跳过转换(建议用EVM验证脚本检测)
(3)GeneMark-ES:自训练型从头注释工具
无需外部训练集,直接对目标基因组自训练预测:
# 批量运行(每个基因组单独创建目录,避免冲突)
gmes_dir=$(pwd)/gmes
ls *_sim.fasta | cut -d "." -f1 | while read id; do
mkdir -p ${gmes_dir}/${id}
cp ${id}_sim.fasta ${gmes_dir}/${id}/
cd ${gmes_dir}/${id}
# --ES:自训练模式;--cores:线程数(根据服务器配置调整)
nohup gmes_petap.pl --ES --cores 30 --sequence ${id}_sim.fasta &
cd ../../
done
# 格式转换(GeneMark输出GTF转EVM兼容GFF3)
ls *_sim.fasta | cut -d "." -f1 | while read id; do
GeneMarkHMM_GTF_to_EVM_GFF3.pl \
gmes/${id}/genemark.gtf > gmes/${id}_gmes_gene.gff
done
4.2 同源预测工具运行
(1)GeMoMa:支持多参考物种的同源注释
GeMoMa 通过近缘物种的 GFF 注释和基因组序列,预测目标基因组的基因结构。
① 多参考物种预测(推荐,提升准确性)
ls *_sim.fasta | cut -d "." -f1 | sort -u | while read id; do
nohup java -jar /data/cm/software/gemoma/GeMoMa-1.9.jar CLI GeMoMaPipeline \
threads=60 \ # 线程数
AnnotationFinalizer.r=NO \ # 不重命名基因
p=false o=true tblastn=true \
t=${id}_sim.fasta \ # 目标基因组
outdir=gemoma/${id} \ # 输出目录
# 第一个参考物种(安氏隐孢子虫)
s=own i=Cand \
a=/biodata/cm/reference/Cand/CryptoDB-59_Candersoni30847.gff \
g=/biodata/cm/reference/Cand/CryptoDB-59_Candersoni30847_Genome.fasta \
# 第二个参考物种(鼠隐孢子虫)
s=own i=Cmur \
a=/biodata/cm/reference/Cmur/CryptoDB-59_CmurisRN66.gff \
g=/biodata/cm/reference/Cmur/CryptoDB-59_CmurisRN66_Genome.fasta &
done
② 格式转换
ls *_sim.fasta | cut -d "." -f1 | sort -u | while read id; do
GeMoMa_gff_to_gff3.pl \
gemoma/${id}/final_annotation.gff > gemoma/${id}_gemoma_gene.gff
done
(2)GenomeThreader:基于蛋白序列的同源联配
利用近缘物种的蛋白序列,通过序列联配预测外显子边界:
ls *_sim.fasta | cut -d "." -f1 | sort -u | while read id; do
# 创建单独目录
mkdir -p gth/${id} && cp ${id}_sim.fasta gth/${id}
cd gth/${id}
# 运行预测
nohup gth \
-genomic ${id}_sim.fasta \ # 目标基因组
-protein /biodata/cm/reference/Cmur/CryptoDB-60_CmurisRN66_AnnotatedProteins.fasta \ # 参考蛋白序列
-o ${id}_gth.gff \ # 输出文件
-gff3out \ # 输出GFF3格式
-intermediate & # 保留中间结果(可选)
cd ../../
done
# 格式转换(适配EVM)
ls *_sim.fasta | cut -d "." -f1 | sort -u | while read id; do
genomeThreader_to_evm_gff3.pl \
gth/${id}/${id}_gth.gff > gth/${id}_gth_gene.gff
done
(3)Exonerate:高效蛋白 - 基因组比对工具
支持批量拆分任务,提升大基因组处理速度:
# 1. 批量拆分预测(分割为16个任务并行)
ls *_sim.fasta | cut -d "." -f1 | sort -u | while read id; do
for i in {1..16}; do # 分割为16个chunk
nohup exonerate \
-q /biodata/cm/reference/Cmur/CryptoDB-60_CmurisRN66_AnnotatedProteins.fasta \ # 参考蛋白
-t ${id}_sim.fasta \ # 目标基因组
--targetchunkid $i \ # 当前chunk ID
--targetchunktotal 16 \ # 总chunk数
--model protein2genome \ # 蛋白-基因组比对模型
--bestn 1 \ # 保留最优匹配
--showtargetgff \ # 输出目标基因组GFF注释
--showalignment no > exo/${id}_$i.gff 2>&1 &
done
done
# 2. 合并拆分结果
ls *_sim.fasta | cut -d "." -f1 | sort -u | while read id; do
cat exo/${id}_*.gff >> exo/${id}_exo.gff
rm -f exo/${id}_*.gff # 删除拆分文件,节省空间
done
# 3. 格式转换(适配EVM)
ls *_sim.fasta | cut -d "." -f1 | sort -u | while read id; do
exonerate_gff_to_alignment_gff3.pl \
exo/${id}_exo.gff > exo/${id}_exo_pro.gff
done
五、EVM 整合多工具预测结果
EvidenceModeler(EVM)通过给不同工具的预测结果分配权重,整合生成最优注释集,是提升注释准确性的关键步骤。
5.1 配置权重文件(weights.txt)
根据工具的可靠性分配权重(权重越高,结果优先级越高),参考配置如下:
# 格式:注释类型 工具名 权重
ABINITIO_PREDICTION Augustus 1 # 从头注释权重较低
ABINITIO_PREDICTION geneid_v1.4 1
ABINITIO_PREDICTION GeneMark.hmm 1
PROTEIN exonerate 4 # 蛋白比对权重较高
OTHER_PREDICTION GeMoMa 4 # 同源预测权重较高
OTHER_PREDICTION genomeThreader 4
创建文件:
# 在prediction目录下创建weights.txt
cat > weights.txt << EOF
ABINITIO_PREDICTION Augustus 1
ABINITIO_PREDICTION geneid_v1.4 1
ABINITIO_PREDICTION GeneMark.hmm 1
PROTEIN exonerate 4
OTHER_PREDICTION GeMoMa 4
OTHER_PREDICTION genomeThreader 4
EOF
5.2 批量整合流程
(1)准备整合输入文件
将每个目标基因组的所有 EVM 格式 GFF 文件复制到单独目录:
ls *_sim.fasta | cut -d "." -f1 | while read id; do
mkdir -p evm/${id}
# 复制所有工具的EVM格式GFF、目标基因组FASTA、权重文件
cp gemoma/${id}_gemoma_gene.gff \
augustus/${id}_aug_gene.gff \
geneid/${id}_gi_gene.gff \
gmes/${id}_gmes_gene.gff \
gth/${id}_gth_gene.gff \
exo/${id}_exo_pro.gff \
${id}_sim.fasta \
weights.txt \
evm/${id}/
done
(2)创建 EVM 运行脚本(evm.sh)
在prediction/evm目录下创建批量运行脚本,用于整合每个基因组的结果:
# 脚本:evm.sh
#!/bin/bash
# 合并所有基因预测结果
cat ./*_gene.gff > gene_predictions.gff3
# 合并所有蛋白比对结果
cat ./*_pro.gff > protein_alignments.gff3
# 分割基因组(避免内存不足,100kb为一个片段,重叠10kb)
partition_EVM_inputs.pl \
--genome ./*.fasta \
--gene_predictions gene_predictions.gff3 \
--protein_alignments protein_alignments.gff3 \
--segmentSize 100000 \ # 片段大小(100kb)
--overlapSize 10000 \ # 重叠大小(10kb,避免基因被拆分)
--partition_listing partitions_list.out
# 生成运行命令
write_EVM_commands.pl \
--genome ./*.fasta \
--weights `pwd`/weights.txt \
--gene_predictions gene_predictions.gff3 \
--protein_alignments protein_alignments.gff3 \
--output_file_name evm.out \
--partitions partitions_list.out > commands.list
# 执行命令
execute_EVM_commands.pl commands.list | tee run.log
# 重组片段结果
recombine_EVM_partial_outputs.pl \
--partitions partitions_list.out \
--output_file_name evm.out
# 转换为GFF3格式
convert_EVM_outputs_to_GFF3.pl \
--partitions partitions_list.out \
--output_file_name evm.out \
--genome ./*.fasta
# 合并所有EVM输出为最终注释文件
find . -regex ".*evm.out.gff3" -exec cat {} \; > EVM.all.gff3
(3)批量运行 EVM
# 给脚本添加执行权限
chmod +x evm.sh
# 遍历每个基因组目录,运行整合脚本
ls ../*_sim.fasta | cut -d "." -f1 | while read id; do
cd evm/${id}
# 运行EVM整合
nohup ./../../evm.sh &
cd ../../
done
5.3 提取最终结果
将整合后的 GFF3 文件整理到results目录,便于后续分析:
# 创建结果目录
mkdir -p results
# 复制最终注释文件和对应的基因组
ls *_sim.fasta | cut -d "." -f1 | while read id; do
cp evm/${id}/EVM.all.gff3 results/${id}_final.gff
cp ${id}_sim.fasta results/
done
# 统计每个基因组的预测基因个数
echo "=== 预测基因个数统计 ==="
ls *_sim.fasta | cut -d "." -f1 | while read id; do
echo -n "${id}: "
grep "EVM" results/${id}_final.gff | grep -c "gene"
done