A fastq processing gadget to remove redundancy and trim length
一个去冗余并修剪长度的fastq处理小工具
最近分析项目的过程中,需要对大量的fastq数据去重,同时还需要将成对的fastq文件剪切到固定的长度,网上找了一圈,却没有找到一个合适的工具。
其中有以下几款软件或多或少可以实现部分功能,但是在串联起来使用的时候不是这里报错就是那里报错,处理起来相当棘手。
具有去重功能的程序
- fastp (https://github.com/OpenGene/fastp)
- fastquniq (https://sourceforge.net/projects/fastuniq/)
- fastq-tools 中 fastq-uniq (https://sourceforge.net/projects/fastuniq/)
- czid-dedup (https://github.com/chanzuckerberg/czid-dedup)
- samtools rmdup (http://www.htslib.org/doc/samtools-rmdup.html)
- samtools markdup ( http://www.htslib.org/doc/samtools-markdup.html )
- picard MarkDuplicates ( https://broadinstitute.github.io/picard/ )
具有修剪长度功能的程序
- fastp (可以从 5’ 或者 3’ 端开始修剪,但是没法修剪为等长序列)
- Trimmomatic (http://www.usadellab.org/cms/?page=trimmomatic)
具有格式转化功能的程序
- fastq to bam (任意比对软件)
- fastq to ubam (picard FastqToSam)
- bam to ubam ( picard RevertSam)
- bam to fastq (bedtools, samtools, picard … )
使用场景
在转录组数据分析中,有时候我们会将没有比对到参考序列上 Reads 提取出来进行进一步分析,所以前置程序的输出结果大部分输出结果为一个经过比对的BAM格式的文件(节省空间,并且包含了更多的信息)。
所以这些数据大多数是已经经过质控的Clean Reads,所以自动跳过使用如 fastp, trimmomatic 等原始数据质控软件,在去除冗余序列的过程中, samtools 及 picard 对剔除比对后的数据支持并不是很好,而且在使用过程中,涉及多次bam排序及fixmate。这里我们自己开发了一个小程序(fastq-dedup-trim.v1.bin) , 可以从 比对后的bam文件中直接对序列根据质量值进行滑窗剪切,同时还可以删除剪切后双端序列重复的Reads。
输入文件为经过比对或者未比对的bam文件,输出为gz压缩后的双端原测序文件。
fastq-dedup-trim.v1.bin -p /path/to/output/prefix --keep-length [145] in.bam
# 结果会在output文件夹下生成 prefix_DedupTrim_R1.fq.gz 和 prefix_DedupTrim_R2.fq.gz 两个文件
软件已经开源,存放在了GitHub仓库中 (https://github.com/Alipe2021/Fastq-Dedup-Trim),欢迎讨论并参与改进。
软件依赖
该程序使用 Python 开发,依赖于pysam模块,为了加速程序运行效率,我们使用 Nuitka 对Python code 进行了编译。
Tips
- Python中快速检索元素使用 Set 还是 Trie
在大规模的数据搜索中,如果不涉及到部分字符串的的搜索,只做 ‘是’ 与 ‘否’ 判断的话,推荐使用 set。速度上差不多,但是非常节省内存。