基因组结构注释实战案例1--随笔14

基因组结构注释实战:整合从头注释与同源预测的完整流程

基因组结构注释是解析基因功能、揭示物种遗传特征的核心步骤,其核心目标是精准识别基因组中的基因位置、外显子 - 内含子边界、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
相关推荐
Aspect of twilight1 小时前
华为华为AI岗实习面试算法题
算法·华为·面试
、、、、南山小雨、、、、1 小时前
云主机GPU pyTorch部署
人工智能·pytorch·python
散峰而望1 小时前
AI 知识科普
人工智能·python·深度学习·机器学习·计算机视觉
西柚小萌新1 小时前
【论文阅读】--多模态大语言模型的安全性研究综述
人工智能·语言模型·自然语言处理
机器之心1 小时前
刚刚,「欧洲的DeepSeek」发布Mistral 3系列模型,全线回归Apache 2.0
人工智能·openai
陈天伟教授1 小时前
机器学习策略(2)符号学派
人工智能·机器学习
tiger1191 小时前
如何进行高效的大模型推理?
人工智能·llm·大模型优化
Cathy Bryant1 小时前
信息论(11):链式法则-证明
笔记·算法·数学建模·概率论·信息与通信