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.fq | ONT 原始读段 |
-pacbio reads.fq | PacBio CLR 读段 |
-pacbio-hifi reads.fq | PacBio HiFi 读段 |
-correct | 只做纠错 |
-trim | 只做修剪 |
-assemble | 只做组装 |
minReadLength=5000 | 最短读段长度 |
correctedErrorRate=0.05 | 纠错后错误率 |
useGrid=true | 启用集群计算 |