基因组从头组装策略
一句话概述:从头组装(de novo assembly)是在没有参考基因组的情况下,将测序短读段拼接成完整基因组序列的过程,是非模式生物基因组研究的第一步。
核心知识点速查表
| 概念 | 说明 |
|---|
| de novo assembly | 不依赖参考基因组,从零拼接序列(白话:像拼拼图但没有盒子上的图) |
| Contig | 连续拼接的序列片段(白话:拼好的一小块拼图) |
| Scaffold | 多个contig用配对信息连接的更长序列(白话:把小块拼图串起来) |
| N50 | 把所有序列从长到短排列,累计长度达到总长度50%时的序列长度(越大越好) |
| k-mer | 长度为k的子序列,是组装算法的基本单元 |
| OLC算法 | Overlap-Layout-Consensus,适合长读段(三代测序) |
| DBG算法 | de Bruijn Graph,适合短读段(二代测序) |
| 混合组装 | 二代+三代数据结合,兼顾准确度和连续性 |
一、组装策略分类
1.1 短读段组装(二代测序)
# === 使用MEGAHIT进行短读段组装 ===
# 适合:宏基因组、小基因组
megahit \
-1 reads_R1.fastq.gz \ # 双端测序的正向reads
-2 reads_R2.fastq.gz \ # 双端测序的反向reads
--min-contig-len 500 \ # 最短contig长度,过滤掉太短的片段
--k-list 21,41,61,81,99 \ # 多个k-mer值,从小到大逐步组装
-t 16 \ # 使用16个CPU线程
-o megahit_output # 输出目录
# === 使用SPAdes进行短读段组装 ===
# 适合:细菌基因组、小真核基因组
spades.py \
-1 reads_R1.fastq.gz \ # 正向reads
-2 reads_R2.fastq.gz \ # 反向reads
--careful \ # 仔细模式,减少错误但更慢
-k 21,33,55,77 \ # k-mer值列表
-t 16 \ # CPU线程数
-m 64 \ # 最大内存使用量(GB)
-o spades_output # 输出目录
1.2 长读段组装(三代测序)
# === 使用Flye进行长读段组装 ===
# 适合:PacBio HiFi / Nanopore长读段
flye \
--pacbio-hifi reads.fastq.gz \ # PacBio HiFi数据(或用--nano-raw指定Nanopore)
--out-dir flye_output \ # 输出目录
--threads 16 \ # CPU线程数
--genome-size 500m # 预估基因组大小(500Mb)
# === 使用hifiasm进行HiFi组装 ===
# 2024-2025最推荐的HiFi组装工具
hifiasm \
-o output_prefix \ # 输出文件前缀
-t 16 \ # CPU线程数
--h1 hi-c_R1.fastq.gz \ # Hi-C数据(可选,用于分型)
--h2 hi-c_R2.fastq.gz \ # Hi-C数据
reads.hifi.fastq.gz # HiFi reads输入
1.3 混合组装策略
# === 使用MaSuRCA进行混合组装 ===
# 结合二代高准确度 + 三代高连续性
# 第1步:创建配置文件
cat > sr_config.txt << 'EOF'
DATA
PE = pe 300 50 reads_R1.fastq.gz reads_R2.fastq.gz # 二代双端数据,insert size 300±50
NANOPORE = nanopore.fastq.gz # Nanopore长读段
END
PARAMETERS
GRAPH_KMER_SIZE = auto # 自动选择k-mer大小
USE_LINKING_MATES = 0 # 不使用linking mates
MEGA_READS_ONE_PASS = 0 # 双pass模式,更准确
NUM_THREADS = 16 # CPU线程数
JF_SIZE = 200000000 # Jellyfish哈希表大小
END
EOF
# 第2步:生成组装脚本
masurca sr_config.txt # 根据配置生成assemble.sh
# 第3步:运行组装
bash assemble.sh # 执行组装流程
二、组装质量评估
# === 使用QUAST评估组装质量 ===
quast.py \
assembly.fasta \ # 待评估的组装结果
-r reference.fasta \ # 参考基因组(可选)
-o quast_output \ # 输出目录
-t 8 \ # CPU线程数
--large # 大基因组模式
# === 关键指标解读 ===
# N50: 越大越好,说明组装连续性好
# L50: 需要多少条序列才能覆盖50%基因组,越小越好
# Total length: 应接近预估基因组大小
# # contigs: 越少越好
# Misassemblies: 错误组装数,越少越好
# === 使用BUSCO评估基因组完整性 ===
busco \
-i assembly.fasta \ # 输入组装结果
-o busco_output \ # 输出目录
-m genome \ # 模式:genome/proteins/transcriptome
-l eukaryota_odb10 \ # 谱系数据库(根据物种选择)
-c 8 # CPU线程数
# BUSCO结果解读:
# Complete: >95% 说明组装很完整
# Duplicated: 高比例可能是杂合或多倍体
# Fragmented: 片段化的基因,组装不完整
# Missing: 缺失的基因
三、组装后处理
# === Pilon纠错(用二代数据纠正三代组装) ===
# 第1步:将二代reads比对回组装结果
bwa index assembly.fasta # 建立索引
bwa mem -t 16 assembly.fasta R1.fq.gz R2.fq.gz | \ # 比对
samtools sort -@ 8 -o aligned.bam # 排序
samtools index aligned.bam # 建立BAM索引
# 第2步:运行Pilon纠错
java -Xmx64G -jar pilon.jar \
--genome assembly.fasta \ # 原始组装结果
--frags aligned.bam \ # 比对结果
--output polished \ # 输出前缀
--threads 16 # CPU线程数
# === Purge_dups去除冗余序列 ===
# 适用于杂合基因组,去除重复的等位基因区域
minimap2 -xmap-pb assembly.fasta reads.fastq.gz | \ # 将reads比对到组装
gzip > aligned.paf.gz # 压缩PAF文件
pbcstat aligned.paf.gz # 统计覆盖度
calcuts PB.stat > cutoffs.txt # 计算覆盖度阈值
purge_dups \
-2 \ # 二次过滤
-T cutoffs.txt \ # 覆盖度阈值
-c PB.base.cov \ # 覆盖度文件
assembly.fasta # 输入组装结果
四、面试高频考点
Q1: N50和L50的区别?
- N50:把所有contig从长到短排序,累加到总长度50%时的那条contig长度。白话:中位数长度
- L50:达到N50时需要的contig数量。白话:需要几块才能拼到一半
- N50越大、L50越小 = 组装质量越好
Q2: 短读段 vs 长读段组装的优缺点?
| 特性 | 短读段(NGS) | 长读段(TGS) |
|---|
| 准确度 | 高(>99.9%) | HiFi高/CLR较低 |
| 连续性 | 差(难跨重复区) | 好(可跨大重复区) |
| 成本 | 低 | 较高 |
| 数据量需求 | 50-100x | 30-50x |
| 适用场景 | 小基因组/宏基因组 | 复杂基因组/全基因组 |
Q3: 什么时候用混合组装?
- 已有二代数据、又能补测三代数据时
- 需要高准确度+高连续性的场景
- 预算有限,只能测少量三代数据时
常见报错与解决
| 报错 | 原因 | 解决方案 |
|---|
Not enough memory | 内存不足 | 减少k-mer值或增加内存 |
N50 very low | 测序深度不够或基因组重复区多 | 增加测序深度或换长读段 |
Too many contigs | 测序数据质量差 | 先做质控(fastp/trimmomatic) |
BUSCO < 80% | 组装不完整 | 检查数据量、换组装策略 |
Segmentation fault | 大基因组内存不够 | 用MEGAHIT替代SPAdes |
工具选择速查表
| 场景 | 推荐工具 | 数据类型 |
|---|
| 细菌基因组 | SPAdes/Unicycler | 二代/混合 |
| 真菌基因组 | SPAdes/Flye | 二代/三代 |
| 植物基因组 | hifiasm+HiC | HiFi+Hi-C |
| 动物基因组 | hifiasm/Flye | HiFi/ONT |
| 宏基因组 | MEGAHIT/metaSPAdes | 二代 |
| 宏基因组(长读段) | metaFlye | 三代 |