Seqtk 是一种快速轻量级的工具,用于处理 FASTA 或 FASTQ 格式的序列。 它可以无缝解析 FASTA 和 FASTQ 文件,这些文件也可以通过 gzip 进行压缩。其中的seqtk sample可以用来从fastq中采样。具体用法如下:
#对于pair-end数据需保证R1/R2的随机种子相同
seqtk sample -s 100 R1.fq.gz 0.5 > R1.0_5.fq.gz
seqtk sample -s 100 R2.fq.gz 0.5 > R2.0_5.fq.gz
#!/bin/bash
set -e
input=$1
output=$2
frac=$3 # 0.2
seqtk sample -s 1011 ${input} ${frac} > ${output}
可以指定一个整数提取一定数目的reads,也可以指定一个小数提取一定比例的reads。
samtools view提供了一个参数可以用于downsample,方法如下:
samtools view -s seed.freq input.bam -b -o downsample.bam
其中seed表示随机种子int类型的整数;freq为downsample的频率,float类型的小数。100.5表示以随机种子为100,取出50%的数据。
该工具对SAM或BAM文件应用下采样算法。该算法中Pair-end的reads要么都保留,要么都丢弃。标记为non-primary的reads pair取将全部丢弃。每次读取被保留的概率为P,因此,使用完全相同的输入以相同的顺序和RANDOM_SEED的相同值执行的运行将产生相同的结果。
其使用方法与常规Picard的方法一致,Picard的一些公共参数该算法也包括。该算法主要有以下参数:
java -jar picard.jar DownsampleSam \
I=input.bam \
O=downsampled.bam \
P=0.5 \
R=100 \
ACCURACY=0.00001 \
STRATEGY=ConstantMemory
–INPUT/-I, 指定输入bam文件
–OUTPUT/-O, 指定输出bam文件
–ACCURACY/-A, 算法的精度,误差尽可能保证在该精度范围,默认1e-4
–RANDOM_SEED/-R, 设定随机种子,默认1
–PROBABILITY/-P, downsample的比例,默认1.0
–STRATEGY/-S, 采用策略,默认ConstantMemory
使用STRATEGY选项可以支持许多不同的下采样策略:
首先计算了每个梯度的数据量与理论上的数据量。两种方法得到的数据与理论值具有很好的一致性。但是对于相同频率不同随机种子之间得到的数据量会存在细微的差距。
其次,比较了两个重复之间的一致性,发现设置相同的随机种子和频率时,得到的两个文件完全一致,MD5检验值相同。
最后,比较了时间上的差异,采用相同的计算资源,Picard要比samtools至少节约80%的时间。
#!/bin/bash
set -e
input_dir=$1
out_dir=$2
frac=$3 # 0.5
i=1
for fq1 in `ls ${input_dir} |grep R1.fastq.gz`
do
fastq_name=`echo $fq1 |sed 's/.R1.fastq.gz//' `
fq2=`echo $fq1 | sed 's/R1/R2/' `
#echo $fq1 $fq2
seqtk sample -s 1011 ${input_dir}/${fq1} ${frac} |gzip > ${out_dir}/${fastq_name}.R1.fastq.gz &
seqtk sample -s 1011 ${input_dir}/${fq2} ${frac} |gzip > ${out_dir}/${fastq_name}.R2.fastq.gz &
n=$[ i % 5 ]
if [ $n -eq 0 ]; then
wait
fi
i=$[ i + 1 ]
wait
done
参考
https://www.cnblogs.com/Sunny-King/p/Bioinformatics-Downsample.html