热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

fastq质量值_FASTP|极速全能的FASTQ预处理神器

FASTQ文件的质控和预处理对于为下游分析至关重要。一般来说,我们每个步骤都会用到不同的软件,比如先用fasqtc看看测序质控,再用tri

0adb3727f22cf31950457c5f3514bbe3.png

FASTQ 文件的质控和预处理对于为下游分析至关重要。一般来说,我们每个步骤都会用到不同的软件,比如先用 fasqtc 看看测序质控,再用 trimmomatic 进行质控,或用 cutadapt 去除接头等等。然而大多数软件都是基于高级编程语言(例如Python和Java)开发的,多线程的效率较低。同时,多次读取和加载数据也会导致预处理速度慢,I/O效率低下。在此背景下 FASTP 软件应运而生,它可以仅仅扫描 FASTQ 文件一次,就可以完成比 FASTQC+ cutadapt + Trimmomatic 这三个软件加起来的功能还多很多的功能,而且速度上比仅仅使用 Trimmomatic 一个软件还要快 3 倍左右。

  • GitHub 地址:https://github.com/OpenGene/fastp

FASTP 的特性

  • 对数据自动进行全方位质控,生成人性化的报告;

  • 过滤功能;

  • 对每一个序列的头部或尾部,计算滑动窗内的质量均值,并将均值较低的子序列进行切除(类似 Trimmomatic 的做法,但是快非常多);

  • 全局剪裁 (在头/尾部,不影响去重),对于 Illumina 下机数据往往最后一到两个 cycle 需要这样处理;

  • 去除接头污染。厉害的是,你不用输入接头序列,因为算法会自动识别接头序列并进行剪裁;

  • 对于双端测序(PE)的数据,软件会自动查找每一对 read 的重叠区域,并对该重叠区域中不匹配的碱基对进行校正;

  • 去除尾部的 polyG。对于 Illumina NextSeq/NovaSeq 的测序数据,因为是两色法发光,polyG 是常有的事,所以该特性对该两类测序平台默认打开;

  • 可以对带分子标签(UMI)的数据进行预处理,不管 UMI 在插入片段还是在 index 上,都可以轻松处理;

  • 可以将输出进行分拆,而且支持两种模式,分别是指定分拆的个数,或者分拆后每个文件的行数。

软件安装

最简单的安装方法莫过于直接下载可执行的软件:

# this binary was compiled on CentOS, and tested on CentOS/Ubuntu
wget http://opengene.org/fastp/fastp
chmod a+x ./fastp

简单上手

  • 单端数据

fastp -i in.fq -o out.fq

  • 双端数据

fastp -i in.R1.fq.gz -I in.R2.fq.gz -o out.R1.fq.gz -O out.R2.fq.gz

可以看到,-i-o用来指定 read1 的输入了输出,而大写的-I-O则是用于指定 read2 的输入和输出。同时,fastp 对于输入和输出都支持 gzip 压缩,使用方法也很简单,只要文件名的末尾带有.gz,就会被认为是 gzip 压缩文件,会启用 gzip 对输入输出进行压缩和解压处理。默认情况下,HTML 报告会保存为 fastp.html(可用-h参数指定名称),JSON 报告保存为 fastp.json(可用-j参数指定名称)。

主要功能

1. 质量过滤

fastp 可以对低质量序列,含较多 N 的序列进行过滤,该功能默认是启用的,但可以使用-Q参数关闭。可使用-q参数来指定合格的 phred 质量值,-u参数来指定最多可以有多少百分比的质量不合格碱基。比如-q 15 -u 40表示一个 read 最多只能有 40% 的碱基的质量值低于 Q15,否则会被扔掉。使用-n可以限定一条 read 中最多能有多少个 N。fastp 还默认启用了 read 长度过滤。使用-l参数指定一个 read 至少有多长,比如-l 30表示长度低于 30 个碱基的 read 会被去掉。

fastp 还几乎包含了 Trimmomatic 软件的所有功能,比如对滑动窗口中的碱基计算平均质量值,然后将不符合的滑窗直接剪裁掉。使用-5参数开启在 5' 端,也就是 read 的开头的剪裁,使用-3参数开启在 3' 端,也就是 read 的末尾的剪裁。使用-W参数指定滑动窗大小,使用-M参数指定要求的平均质量值。用-f-t分别指定 read1 的头部和尾部的剪裁,使用-F-T分别指定 read2 的头部和尾部的剪裁。

在 fastp 的 HTML 报告中,最开始的 Summary 表格显示了过滤的统计信息:

9c87b121172305a1624292650bcfbe6e.png

2. 接头处理

fastp 可以自动化地查找接头序列并进行剪裁,不需要输入任何接头序列。

2f8642098e44991861889873661baeae.png

3. 校正碱基(用于双端测序)

fastp 支持对双端测序数据的每一对 read 进行分析,查找它们的重叠区间,然后对于重叠区间中不一致的碱基,如果发现其中一个质量非常高,而另一个非常低,则可以将非常低质量的碱基改为相应的非常高质量值的碱基值,如下图所示:

20bda13971c11898227beba92e5309f6.png

上图中所示的标红的 T 碱基是低质量序列,和高质量的 A 不匹配,它会被校正为 A。

除此之外,还可以使用-m参数,开启合并模式,将双端测序数据进行合并处理。

4. UMI 数据的处理

UMI 在处理 ctDNA 类似的超低频突变检测应用中是十分有用的,为了更好地对带 UMI 的 FASTQ 文件进行预处理,fastp 也很好地支持了对 UMI 标签预处理功能。该功能默认没有启用,需要使用-U参数开启,另外需要使用--umi_loc来指定 UMI 所在的位置,它可以是(index1、 index2、 read1、 read2、 per_index、 per_read )中的一种,分别表示 UMI 是在 index 位置上,还是在插入片段中。如果指定了是在插入序列中,还需要使用--umi_len参数来指定 UMI 所占的碱基长度。还可以使用--umi_skip来设置 UMI 之后需要跳过的碱基数。fastp 会把 UMI 的信息加入 fastq 文件的 read 名称中,所以 UMI 的信息也会显示在 SAM / BAM 文件中。

举个例子,比如,在我的双端测序文件中,每条 read 的 UMI 插入在 read 的最前端,占 3 个碱基,之后又用了两个随机碱基把 UMI 与 ctDNA 测序数据隔开:

@NB501841:4:HJJW3AFXY:1:11101:5427:1093 1:N:0:CGGCTAAT+NTCGTTCT
CAGTACATCATCTGCTTGATCCATTTTAGTTTTCACTGTGCGAAGACTTTTATGTCTACTATTGGGAACATTCCTTCCTGAAACAGTACAATAATTCAGTGAGAATGTATATACTCTGGAGTAT
+
AAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAEEEEEE

代码就是这样写:

fastp --thread 16 --in1 $fq1 --in2=$fq2 --out1 tmp_${fq1}.fq --out2=tmp_${fq2}.fq -U --umi_loc=per_read --umi_len=3 --umi_skip=2

处理完后可以看到双端 UMI 的信息已经加入到第一行的注释中,CAG即为第一条 read 的 UMI 信息,ATA则是其反向 read 的 UMI 信息:

@NB501841:4:HJJW3AFXY:1:11101:5427:1093:CAG_ATA 1:N:0:CGGCTAAT+NTCGTTCT
CATCATCTGCTTGATCCATTTTAGTTTTCACTGTGCGAAGACTTTTATGTCTACTATTGGGAACATTCCTTCCTGAAACAGTACAATAATTCAGTGAGAATGTATATACTCTGG
+
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEAEEEEEE

这样将 FASTQ 文件进行比对后,UMI 信息也会保存在 SAM / BAM 文件中,进一步可使用同样是 OpenGene 软件库中的 gencore 软件生成 consensus reads,并基于 consensus reads 进行下游分析。

5. 输出文件切分

fastp 软件还可以对输出的 FASTQ 文件进行切分,分成大小均匀的多个文件,这样可以使用比对软件并行地比对,提高并行处理的速度。fastp 支持两种模式,分别是使用参数-s指定切分后文件的个数,或使用-S参数指定每个切分后文件的行数。

Reference

  • fastp: 一款超快速全功能的FASTQ文件自动化质控+过滤+校正+预处理软件

  • https://github.com/OpenGene/fastp


猜你喜欢

我的 Shiny 入门学习笔记

分析带 UMI 分子标签的测序数据

我的 Docker 笔记

使用 bcl2fastq 将 base call 文件转换成 fastq 文件

在 Python 中调用百度 API 批量翻译

生信考研经历分享

生信基础知识100讲

生信菜鸟团-专题学习目录(5)

生信菜鸟团-专题学习目录(6)

生信菜鸟团-专题学习目录(7)

还有更多文章,请移步公众号阅读

▼ 如果你生信基本技能已经入门,需要提高自己,请关注下面的生信技能树,看我们是如何完善生信技能,成为一个生信全栈工程师。

08973c6c4508ab021d95811c82321bb9.png

▼ 如果你是初学者,请关注下面的生信菜鸟团,了解生信基础名词,概念,扎实的打好基础,争取早日入门。

236a3c862f8b1b6b0e82e2534dba7339.png




推荐阅读
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 本文详细介绍了在 Ubuntu 系统上搭建 Hadoop 集群时遇到的 SSH 密钥认证问题及其解决方案。通过本文,读者可以了解如何在多台虚拟机之间实现无密码 SSH 登录,从而顺利启动 Hadoop 集群。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在处理大规模数据数组时,优化分页组件对于提高页面加载速度和用户体验至关重要。本文探讨了如何通过高效的分页策略,减少数据渲染的负担,提升应用性能。具体方法包括懒加载、虚拟滚动和数据预取等技术,这些技术能够显著降低内存占用和提升响应速度。通过实际案例分析,展示了这些优化措施的有效性和可行性。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 当PHP中的tempnam()函数被禁用后的应对策略与解决方案
    当 PHP 中的 `tempnam()` 函数被禁用时,开发者需要采取相应的替代方案以确保应用程序的正常运行。本文探讨了多种应对策略,包括使用 `sys_get_temp_dir()` 结合自定义文件命名方法,以及利用第三方库来生成临时文件。此外,还详细介绍了如何在不同操作系统和服务器环境中配置临时文件路径,以提高代码的兼容性和安全性。 ... [详细]
  • 帝国CMS中的信息归档功能详解及其重要性
    本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ... [详细]
author-avatar
awrjftyitik
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有