Nanopore长读长测序分析¶
一句话概述¶
Oxford Nanopore Technologies (ONT) 纳米孔测序通过电信号直接检测DNA/RNA分子——白话说就是:DNA分子穿过一个纳米级的小孔,每个碱基会产生不同的电流波动,通过分析这些电流变化来"读"出DNA序列,一次能读几千到几百万碱基。
核心知识点表格¶
| 知识点 | 说明 |
|---|---|
| 纳米孔原理 | DNA穿过蛋白纳米孔,不同碱基引起不同电流变化 |
| 测序仪 | MinION(便携式)、GridION、PromethION(高通量) |
| Dorado | 2025年主流basecaller,已取代Guppy,v1.0.0含变异检测 |
| Guppy | 旧版basecaller,已停止维护,建议升级到Dorado |
| POD5 | 新一代原始信号格式,取代FAST5 |
| minimap2 | 长读长序列比对的"金标准"工具 |
| 读长 | 常规5-50kb,超长模式可达数Mb |
| 准确率 | HAC模式~98%,SUP模式~99%(2025年v5.2.0模型) |
| 甲基化检测 | Dorado可直接从原始信号检测5mC、5hmC、6mA修饰 |
| 结构变异 | Sniffles2、SVIM、cuteSV检测SV |
各步骤详解¶
第一步:理解Nanopore测序¶
白话解释: 传统测序(如Illumina)需要先复制DNA,然后一小段一小段地读(150bp)。Nanopore不同,它直接把原始DNA分子塞进一个蛋白孔中,像"过安检"一样逐个碱基扫描。好处是读长超长(能读整个基因甚至整条染色体),缺点是单次读取的错误率比Illumina高一些。
Illumina vs Nanopore 对比:
Illumina: 读长150-300bp | 错误率<0.1% | 需要扩增 | 不能检测修饰
Nanopore: 读长5kb-数Mb | 错误率1-2% | 不需扩增 | 直接检测修饰
第二步:Basecalling(信号转碱基)¶
白话解释: 纳米孔测序仪记录的是电流信号(波形数据),需要用AI模型把电流波形"翻译"成ATCG碱基序列。这个过程就叫basecalling,Dorado是目前唯一推荐的basecaller。
# ========== Dorado安装 ==========
# 方法1:从GitHub下载预编译版本
# https://github.com/nanoporetech/dorado/releases
# 方法2:conda安装
conda install -c nanoporetech dorado # conda安装Dorado
# 验证安装
dorado --version # 显示版本(推荐v1.0.0+)
# ========== 下载basecalling模型 ==========
# Dorado需要下载AI模型文件
dorado download --model dna_r10.4.1_e8.2_400bps_hac@v5.2.0 # HAC模型(速度与精度平衡)
dorado download --model dna_r10.4.1_e8.2_400bps_sup@v5.2.0 # SUP模型(最高精度)
# 三种精度模式:
# fast → 最快,准确率最低(~95%)→ 实时监控用
# hac → 平衡模式(~98%)→ 常规分析推荐
# sup → 最慢,准确率最高(~99%)→ 发文章推荐
# ========== 运行Basecalling ==========
# 基本用法:把POD5信号文件转为FASTQ/BAM
dorado basecaller \ # 主命令
dna_r10.4.1_e8.2_400bps_sup@v5.2.0 \ # 模型名称(SUP模式)
/data/pod5_files/ \ # POD5信号文件目录
--device cuda:0 \ # 使用GPU(推荐)
> basecalled.bam # 输出BAM文件
# 带比对的basecalling(同时完成basecalling和比对)
dorado basecaller \ # 主命令
dna_r10.4.1_e8.2_400bps_hac@v5.2.0 \ # HAC模型
/data/pod5_files/ \ # POD5文件目录
--reference /ref/GRCh38.fa \ # 参考基因组(自动调用minimap2比对)
> aligned.bam # 输出比对后的BAM
# 带甲基化检测的basecalling
dorado basecaller \ # 主命令
dna_r10.4.1_e8.2_400bps_sup@v5.2.0 \ # SUP模型
/data/pod5_files/ \ # POD5文件
--modified-bases 5mCG_5hmCG \ # 同时检测5mC和5hmC
--reference /ref/GRCh38.fa \ # 参考基因组
> methylation.bam # 含甲基化信息的BAM
第三步:比对(Alignment)¶
白话解释: 把reads"放回"到参考基因组上对应的位置。minimap2是长读长比对的首选工具,速度快且能处理高错误率的reads。
# ========== minimap2安装 ==========
conda install -c bioconda minimap2 # conda安装
# 或从源码:git clone https://github.com/lh3/minimap2 && cd minimap2 && make
# ========== 比对 ==========
# Nanopore DNA比对
minimap2 \ # 比对命令
-ax map-ont \ # 预设参数:Nanopore长读长
-t 16 \ # 16线程
/ref/GRCh38.fa \ # 参考基因组
basecalled.fastq.gz \ # 输入FASTQ
| samtools sort \ # 管道:排序
-@ 8 \ # 排序用8线程
-o aligned.bam # 输出排序后的BAM
# 建索引
samtools index aligned.bam # BAM建索引
# 如果是RNA数据(cDNA测序)
minimap2 \
-ax splice \ # RNA剪接比对模式
-uf \ # 正链RNA
/ref/GRCh38.fa \ # 参考基因组
rna_reads.fastq.gz \ # RNA reads
| samtools sort -o rna_aligned.bam # 排序输出
# 比对统计
samtools flagstat aligned.bam # 查看比对率、配对率等统计
samtools stats aligned.bam | head -40 # 详细统计信息
第四步:质控(QC)¶
白话解释: 检查测序数据质量——读了多少条、有多长、质量怎么样。NanoPlot是Nanopore数据质控的标准工具。
# 安装NanoPlot
pip install NanoPlot # pip安装
# 对FASTQ文件做质控
NanoPlot \ # 运行质控
--fastq basecalled.fastq.gz \ # 输入FASTQ
--outdir nanoplot_output/ \ # 输出目录
--threads 8 \ # 线程数
--plots dot # 图表类型
# 对BAM文件做质控
NanoPlot \
--bam aligned.bam \ # 输入BAM
--outdir nanoplot_bam/ \ # 输出目录
-t 8 # 线程数
# 关键质控指标:
# Mean read length: 平均读长(一般5-20kb)
# Mean read quality: 平均质量(Q10+可接受,Q15+较好)
# N50: 50%的数据由长度≥N50的reads组成
# Total bases: 总碱基数(衡量通量)
# NanoStat:快速统计(比NanoPlot轻量)
NanoStat --fastq basecalled.fastq.gz # 快速统计
第五步:变异检测¶
白话解释: 找出样本和参考基因组之间的差异——包括小变异(SNP、小插入/缺失)和大变异(结构变异:几百到几百万碱基的重排)。
# ===== SNP/Indel检测(Clair3)=====
# Clair3是Nanopore SNP/Indel检测的推荐工具
# Docker运行Clair3(最方便)
docker run \ # Docker运行
-v /data:/data \ # 挂载数据目录
hkubal/clair3:latest \ # Clair3镜像
/opt/bin/run_clair3.sh \ # 运行脚本
--bam_fn=/data/aligned.bam \ # 输入BAM
--ref_fn=/data/GRCh38.fa \ # 参考基因组
--output=/data/clair3_output/ \ # 输出目录
--threads=16 \ # 线程数
--platform="ont" \ # 平台:ONT
--model_path=/opt/models/ont # ONT专用模型
# ===== 结构变异检测(Sniffles2)=====
# Sniffles2专门检测长读长数据中的结构变异(SV)
conda install -c bioconda sniffles # 安装Sniffles2
sniffles \ # 运行SV检测
--input aligned.bam \ # 输入BAM
--vcf sv_calls.vcf \ # 输出VCF
--reference /ref/GRCh38.fa \ # 参考基因组
--threads 8 \ # 线程数
--minsvlen 50 # 最小SV长度50bp
# ===== Dorado内置变异检测(v1.0.0新功能)=====
dorado variant \ # Dorado变异检测(实验性)
aligned.bam \ # 输入BAM
--reference /ref/GRCh38.fa \ # 参考基因组
> variants.vcf # 输出VCF
第六步:基因组组装(可选)¶
白话解释: 如果没有参考基因组(或者想从头拼接新基因组),可以用长读长reads直接组装。
# Flye:Nanopore数据从头组装的常用工具
conda install -c bioconda flye # 安装Flye
flye \ # 组装命令
--nano-hq basecalled.fastq.gz \ # Nanopore HQ reads(Q20+)
--out-dir flye_assembly/ \ # 输出目录
--threads 32 \ # 线程数
--genome-size 3g # 预估基因组大小(人类3Gb)
# 组装质量评估
# 用QUAST或BUSCO评估
quast flye_assembly/assembly.fasta \ # QUAST评估
-r /ref/GRCh38.fa \ # 参考基因组(如果有)
-o quast_report/ # 输出目录
# 组装polish(磨光/纠错)
dorado polish \ # Dorado polish(v1.0.0新功能)
aligned.bam \ # BAM文件
flye_assembly/assembly.fasta \ # 组装结果
> polished_assembly.fasta # 磨光后的组装
常见报错与解决¶
| 报错 | 原因 | 解决方案 |
|---|---|---|
dorado: CUDA error | GPU驱动或CUDA版本不对 | 更新GPU驱动,确认CUDA版本匹配 |
dorado: model not found | 模型没下载或路径错 | 用dorado download下载对应模型 |
minimap2: segfault | 参考基因组太大或内存不足 | 增加内存,或分染色体比对 |
Clair3: low variant quality | 测序深度不够 | 建议SNP检测需≥20x覆盖度 |
NanoPlot: no reads | FASTQ文件为空或格式错 | 检查basecalling是否成功 |
FAST5 not supported | 旧格式FAST5在新版Dorado不支持 | 用pod5 convert将FAST5转POD5 |
basecalling very slow | 没用GPU或模型太大 | 使用GPU,或换fast/hac模型 |
速查表¶
# ========== Nanopore分析速查 ==========
# 1. Basecalling(信号→序列)
dorado basecaller MODEL POD5_DIR > output.bam # 基本
dorado basecaller MODEL POD5_DIR --reference REF.fa > aligned.bam # 含比对
dorado basecaller MODEL POD5_DIR --modified-bases 5mCG > meth.bam # 含甲基化
# 2. 比对
minimap2 -ax map-ont -t 16 REF.fa reads.fq | samtools sort -o out.bam
samtools index out.bam
# 3. 质控
NanoPlot --fastq reads.fq --outdir qc_output/
NanoStat --fastq reads.fq
# 4. 变异检测
# SNP/Indel: Clair3
# 结构变异: sniffles --input out.bam --vcf sv.vcf
# 甲基化: dorado + modkit
# 5. 组装
flye --nano-hq reads.fq --out-dir assembly/ --genome-size SIZE
dorado polish aligned.bam assembly.fasta > polished.fasta
面试高频问题¶
Q1: Nanopore测序的原理是什么?和Illumina有什么区别?
Nanopore通过纳米蛋白孔检测DNA穿过时的电流变化来直接读取序列,不需要荧光标记和化学反应。优势:(1) 超长读长(几kb到Mb级别);(2) 直接检测碱基修饰(5mC等);(3) 实时测序(边测边分析)。劣势:单次读取错误率(1-2%)高于Illumina(<0.1%)。
Q2: Dorado和Guppy有什么区别?
Dorado是ONT的新一代basecaller,已完全取代Guppy。Dorado的优势:(1) GPU利用率更高(甲基化检测比Guppy快3.8倍);(2) 集成了比对(minimap2)、纠错(HERRO)、组装磨光、变异检测等功能;(3) 开源、持续更新。Dorado v1.0.0(2025年5月)引入了v5.2.0模型,HAC准确率达98%(比v5.0.0提高~15%错误率降低)。
Q3: Nanopore数据需要多少测序深度?
取决于应用场景:SNP/Indel检测需要≥20x;结构变异检测需要≥10x;基因组组装需要≥30x(HiFi纠错后15-20x也可以);甲基化检测建议≥15x。深度 = 总碱基数 / 基因组大小。
Q4: 长读长测序在哪些场景特别有优势?
(1) 结构变异检测:长reads能直接跨越断点,检测率远高于短reads;(2) 基因组从头组装:减少gap,接近T2T水平;(3) 重复区域分析:长reads能跨越重复区域;(4) 碱基修饰检测:直接从原始信号检测;(5) 全长转录本鉴定:一条read覆盖整个转录本。
Q5: POD5和FAST5格式的区别?
POD5是ONT新一代信号存储格式,取代FAST5。POD5优势:(1) 文件更小(压缩效率更高);(2) 读取速度更快;(3) 与Dorado完全兼容。FAST5是旧格式,新版MinKNOW和Dorado默认使用POD5。旧FAST5文件可以用
pod5 convert fast5命令转换。