跳转至

基因组从头组装策略

一句话概述:从头组装(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-100x30-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+HiCHiFi+Hi-C
动物基因组hifiasm/FlyeHiFi/ONT
宏基因组MEGAHIT/metaSPAdes二代
宏基因组(长读段)metaFlye三代