原理
fastp 解决的是测序数据预处理中一个很现实的痛点。传统流程里,FastQC 做质控,Cutadapt 切接头,Trimmomatic 做质量修剪——三个工具、三次读盘、三份报告。fastp 把这些操作合并到一次数据扫描里完成。C++ 底层、多线程并行,处理速度比 Trimmomatic 快 2~5 倍,同时输出一份处理前后并列对比的 HTML 报告。没别的。
在病毒溯源工作中,无论是临床样本的扩增子测序(比如 ARTIC 方案产生的 SARS-CoV-2 数据),还是宏基因组鸟枪法筛查新发病原体,第一步都是把原始 FASTQ 里的接头污染、低质量碱基、polyG 尾清理干净。数据不干净,下游的比对、组装、变异检测全都会被拖累。fastp 在这个定位上是一个预处理一站式方案——质控和数据清洗合二为一,省时间、省 IO、少出错。在 SARS-CoV-2 基因组监测与溯源案例中,fastp 已被 nf-core/viralrecon、ViReflow 等主流病毒分析流程采纳为默认预处理模块。
操作步骤
1. 安装 fastp
最省事的方法是通过 Bioconda 安装,也可以用预编译二进制:
conda install -c bioconda fastpwget http://opengene.org/fastp/fastp
chmod a+x ./fastp2. 运行基础质控与过滤
双端测序数据的最简命令——只指定输入输出,其余全部用默认参数。fastp 会自动检测并切除接头、过滤低质量序列、生成 HTML 报告。
fastp -i sample_R1.fq.gz -I sample_R2.fq.gz \
-o clean_R1.fq.gz -O clean_R2.fq.gz \
-h fastp_report.html -j fastp_report.json默认参数已经覆盖了:接头自动检测与切除、polyG 尾修剪(针对 NovaSeq/NextSeq)、碱基质量过滤(Q15 为合格线,允许最多 40% 不合格碱基)、最短读长过滤(默认 15 bp)、N 碱基数量过滤(超过 5 个就丢弃)。处理完自动输出 fastp.html 和 fastp.json 两份报告。
3. 按需叠加高级参数
病毒测序数据常见需要额外参数的场景:
fastp -i in_R1.fq.gz -I in_R2.fq.gz \
-o out_R1.fq.gz -O out_R2.fq.gz \
--cut_right --cut_window_size 4 --cut_mean_quality 20 \
--length_required 50 \
--correction \
--detect_adapter_for_pe \
-h report.html--cut_right 做滑动窗口质量修剪,从 5' 向 3' 扫描,遇到窗口平均质量低于 Q20 就把该窗口及右侧全部切掉(这是替代 Trimmomatic SLIDINGWINDOW 的关键功能)。--length_required 50 丢弃修剪后短于 50 bp 的 reads,避免过短序列干扰下游比对。--correction 对双端 reads 重叠区域做碱基校正:一端高质量、另一端低质量时,用高质量碱基覆盖低质量碱基。--detect_adapter_for_pe 为双端数据额外启用接头序列检测,比纯 overlap 分析多找到 0.1%~0.5% 的残留接头。UMI 标记的病毒测序文库用 --umi --umi_loc=read1 --umi_len=8 把 UMI 序列提取到 read ID 中供后续去重使用。
4. 解读 HTML 报告
fastp HTML 报告的核心价值在于前后对比:同一页面并列展示过滤前后的碱基质量曲线、GC 含量分布、序列长度分布、接头含量、重复率。重点关注几个指标:碱基质量曲线过滤后应整体抬升,尾部质量塌陷被切除。GC 含量过滤后应恢复正常钟形曲线(原始数据 GC 比例异常偏离理论值往往是接头或外源污染的信号)。Adapter Content 确认过滤后趋近于零。Duplication Rate 方面,病毒扩增子数据通常重复率偏高属正常现象,但宏基因组样本中出现异常高重复率提示可能存在 PCR 过度扩增。
参数选择建议
| 参数 | 推荐值 | 说明 |
|---|---|---|
| -q / --qualified_quality_phred | 15 | 合格碱基的最低 Phred 质量值,默认即可 |
| -u / --unqualified_percent_limit | 40 | 允许的不合格碱基百分比上限 |
| -n / --n_base_limit | 5 | 单条 read 中 N 碱基最大数量 |
| -l / --length_required | 50(病毒分析) | 建议设 50 bp 以上,避免短序列错误比对 |
| -W / --cut_window_size | 4 | 滑动窗口大小,默认 4 bp |
| -M / --cut_mean_quality | 20(Q20) | 滑动窗口平均质量阈值 |
| --overlap_len_require | 30 | 双端重叠检测最小长度 |
| -c / --correction | 视情况启用 | 双端数据推荐开启碱基校正 |
| -D / --dedup | 宏基因组可开 | PCR 去重,扩增子数据慎用 |
常见问题
fastp 和 Trimmomatic + FastQC 组合怎么选?
追求速度和省事选 fastp。一次扫描、一份报告、速度是 Trimmomatic 的 2~5 倍。需要极度精细控制每个步骤参数(比如自定义 score 体系)的场景,Trimmomatic 更灵活。对大多数病毒测序项目,fastp 默认参数已经足够好。就这样。
为什么 fastp 默认参数就能满足大部分需求,还需要调参吗?
默认值本身就是针对 Illumina 短读长数据优化的通用方案。需要调参的典型场景:病毒扩增子数据需要提高 --length_required 来过滤引物二聚体干扰;宏基因组去宿主后读长变短需要放宽长度限制;处理 MGI 平台数据时加 --fix_mgi_id 修正序列 ID 格式。
病毒扩增子测序数据,fastp 要不要开 dedup?
一般不开。扩增子文库本质上是 PCR 产物,reads 天然高度重复。开了 dedup(-D)会把真实的病毒基因组覆盖深度削掉,反而降低变异检测灵敏度。宏基因组鸟枪法数据没有这个顾虑,开 dedup 有助于去除 PCR 重复、提升组装质量。
参考文献
- Chen S, Zhou Y, Chen Y, Gu J. fastp: an ultra-fast all-in-one FASTQ preprocessor. Bioinformatics. 2018;34(17):i884-i890. DOI: 10.1093/bioinformatics/bty560
- Chen S. Ultrafast one-pass FASTQ data preprocessing, quality control, and deduplication using fastp. iMeta. 2023;2(2):e107. DOI: 10.1002/imt2.107
