跳转至

Canu — 长读段纠错与组装一站式工具


一句话说明

Canu 是一个集成了纠错(correct)、修剪(trim)和组装(assemble)三步的长读段基因组组装工具,特别擅长处理高错误率的 ONT 和 PacBio CLR 读段,也常单独用于读段纠错后交给其他组装工具。


安装与配置

# 方法1:conda 安装(推荐)
conda install -c bioconda canu  # 从 bioconda 安装

# 方法2:预编译下载
wget https://github.com/marbl/canu/releases/download/v2.2/canu-2.2.Linux-amd64.tar.xz
tar -xJf canu-2.2.Linux-amd64.tar.xz  # 解压即用

# 验证安装
canu --version  # 当前最新 v2.2(2022年,稳定版本)

资源需求

  • 细菌基因组(5Mb):约 4-8GB RAM,1-2 小时
  • 人类基因组(3Gb):约 64-128GB RAM,数天
  • 支持分布式计算(SGE、Slurm、PBS)

核心用法

基本组装

# ONT 读段完整组装流程(纠错 → 修剪 → 组装)
canu \
  -p sample \                    # 输出文件前缀
  -d canu_output \               # 输出目录
  genomeSize=5m \                # 基因组大小(细菌约 5Mb)
  -nanopore ont_reads.fq.gz      # ONT 读段

# PacBio CLR 读段组装
canu \
  -p sample \
  -d canu_output \
  genomeSize=5m \
  -pacbio clr_reads.fq.gz        # PacBio CLR 读段

# PacBio HiFi 读段组装
canu \
  -p sample \
  -d canu_output \
  genomeSize=5m \
  -pacbio-hifi hifi_reads.fq.gz  # PacBio HiFi 读段

进阶用法

# 只做纠错(纠错后的读段给 Flye/Hifiasm 用)
canu \
  -correct \                     # 只执行纠错步骤
  -p corrected \
  -d correct_output \
  genomeSize=5m \
  -nanopore ont_reads.fq.gz
# 纠错后的读段:correct_output/corrected.correctedReads.fasta.gz

# 只做修剪
canu \
  -trim \                        # 只执行修剪步骤
  -p trimmed \
  -d trim_output \
  genomeSize=5m \
  -nanopore-corrected corrected_reads.fq.gz  # 输入已纠错的读段

# 只做组装
canu \
  -assemble \                    # 只执行组装步骤
  -p assembled \
  -d assemble_output \
  genomeSize=5m \
  -nanopore-corrected trimmed_reads.fq.gz  # 输入已修剪的读段

# 调整参数适应高覆盖度数据
canu \
  -p sample \
  -d canu_output \
  genomeSize=5m \
  correctedErrorRate=0.05 \      # 纠错后的预期错误率(ONT 默认 0.12)
  minReadLength=5000 \           # 最短读段长度(过滤短片段)
  minOverlapLength=2000 \        # 最短重叠长度
  -nanopore ont_reads.fq.gz

# 在 Slurm 集群上运行
canu \
  -p sample \
  -d canu_output \
  genomeSize=3g \                # 人类基因组 3Gb
  useGrid=true \                 # 启用集群模式
  gridEngineResourceOption="-l h_vmem=MEMORY" \
  gridOptions="--partition=normal" \
  -nanopore ont_reads.fq.gz

输出文件

ls canu_output/
# sample.contigs.fasta  — 最终 contig 序列(主要结果)
# sample.unassembled.fasta — 未组装的读段
# sample.report          — 组装统计报告
# sample.contigs.layout  — contig 布局信息

常见问题与踩坑

问题1:运行时间非常长

原因:Canu 的纠错步骤是全对全比对,计算量大
解决:可以只用 Canu 做纠错(-correct),组装部分交给 Flye(更快)

问题2:Canu vs Flye 怎么选

对比:Canu 有内置纠错步骤,组装质量好但慢;Flye 快很多,直接用原始读段
建议:赶时间用 Flye;追求最高质量用 Canu 纠错 + Flye 组装的组合

问题3:基因组大小填错影响大吗

影响:主要影响覆盖度估计和读段选择策略
建议:可以填一个大概值,误差 20% 内影响不大

问题4:java.lang.OutOfMemoryError

原因:Canu 部分步骤使用 Java,JVM 堆内存不足
解决:设置 maxMemory=64 或增加 JVM 内存 export _JAVA_OPTIONS="-Xmx64g"


速查卡片

命令/参数用途
canu -p prefix -d outdir genomeSize=5m基本设置
-nanopore reads.fqONT 原始读段
-pacbio reads.fqPacBio CLR 读段
-pacbio-hifi reads.fqPacBio HiFi 读段
-correct只做纠错
-trim只做修剪
-assemble只做组装
minReadLength=5000最短读段长度
correctedErrorRate=0.05纠错后错误率
useGrid=true启用集群计算