跳转至

Nanopore长读长测序分析

一句话概述

Oxford Nanopore Technologies (ONT) 纳米孔测序通过电信号直接检测DNA/RNA分子——白话说就是:DNA分子穿过一个纳米级的小孔,每个碱基会产生不同的电流波动,通过分析这些电流变化来"读"出DNA序列,一次能读几千到几百万碱基。


核心知识点表格

知识点说明
纳米孔原理DNA穿过蛋白纳米孔,不同碱基引起不同电流变化
测序仪MinION(便携式)、GridION、PromethION(高通量)
Dorado2025年主流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 errorGPU驱动或CUDA版本不对更新GPU驱动,确认CUDA版本匹配
dorado: model not found模型没下载或路径错dorado download下载对应模型
minimap2: segfault参考基因组太大或内存不足增加内存,或分染色体比对
Clair3: low variant quality测序深度不够建议SNP检测需≥20x覆盖度
NanoPlot: no readsFASTQ文件为空或格式错检查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命令转换。