Jellyfish-2的安装与使用

说在前头

啥是kmer?

kmer就是一条长度为kbp的DNA string。

Jellyfish有啥用?

计算输入的基因组数据(fasta)、测序数据(fastq)等,长度为k的DNA序列的频数分布。相当于把input当作一个很大的集合,kmer就相当于一个子集,去遍历整个集合。


image.png

Jellyfish-2的安装

安装有很多种方式,可以从github上下载,也可以从conda上直接进行安装。

wget https://github.com/gmarcais/Jellyfish/releases/download/v2.3.0/jellyfish-2.3.0.tar.gz
tar -zxvf jellyfish-2.3.0.tar.gz
cd jellyfish-2.3.0
make install
conda search jellyfish
conda install jellyfish

Jellyfish-2的使用

1.0 Counting k-mers in sequencing reads

jellyfish count
#常用参数
-m #counting kmer occurrence的过程中,所使用的kmer数。
-t  #counting kmer过程中,所使用的线程数。
-s #预估在countin kmer过程中,有多少kmer会被储存到hash文件中。
-C #正、反义链都进行计算。
-F #同时打开文件的数量。比如,NCBI上下载的SRA数据,再经过fastq-dump后,可能是mate-pair或者pair-end的数据类型,前者为3个fastq,后者为2个,因此就设置对应的数值。
-o #prefix的设置。
-Q #设置一个阈值,任何质量值小于该值的碱基会被改为N。

Input为测序数据时,用k-mer遍历,但是该kmer是来自于正义链还是反义链都是未知的。但是从本质上来说,k-mer是等价于它的反义k-mer的。因此此时我们需要设置-C参数。该参数只将canonical kmer保存,但是频率为该k-mer出现的频率与其反义k-mer的频率。
Jellyfish-2与Jellyfish-1不同的点是,Jellyfish中的-s参数只是一个估计值。如果给定的size太小,而不能容纳所有kmer,那么结果hash文件的大小就会自动扩增或者会暂时将结果文件写入到磁盘中,最后自动整合在一起。因此Jellyfish-1中的merge命令就不需要了。

1.1 Counting higher-frequency kmers

在用Jellyfish计算测序数据中出现的kmer频率的过程中,可以将kmer分为2种类型:
(1)low-frequenc kmers
(2)high-frequency kmers
在 low frequency kmers 中,即测序数据中出现次数少的kmer中,只出现一次的kmer,极有可能是因为random sequencing error所产生的kmer,同样也会被储存到hash文件中。
所以应该如何获得高频k-mer呢?
有2种方法:

  1. one pass method
  2. two pass method
#one pass method
jellyfish count -m 25 -s 3G --bf-size 100G -t 16 homo_sapiens.fa

在counting all k-mers的基础上,加入--bf-size参数,会在jellyfish count运行的时候,先将得到的k-mers用Bloom filter进行过滤,然后将至少出现过1次的kmer添加到结果hash文件中。
--bf-size的设定数值应当是counting kmer结果预期产生的k-mers的数量。
-size的设定应当是counting过程中,出现次数大于1的k-mers的数量。
在Jellyfish-2的使用手册中,human的推荐参数设置为25-mer和30×的测序深度。

#two pass method
jellyfish bc -m 25 -s 100G -t 16 -o homo_sapiens.bc homo_sapiens.fa
jellyfish count -m 25 -s 3G -t 16 --bc homo_sapiens.bc homo_sapiens.fa

two pass的流程中,jellyfis bc会产生一个Bloom counter,之后Bloom counter会传递给jellyfish count,同时只有在Bloom counter过程中出现过2次或2次以上的k-mers会被保存到结果hash文件中。

histogram的生成

这个相对来说就比较简单,而且好理解了。

jellyfish histo mer_counts.jf > mer_counts.histo

Jellyfish还有许多其他功能,比如查看某一特定k-mer的频数,使用的是query命令等等。更仔细地可以参考Jellyfish-2的使用手册。

你可能感兴趣的:(Jellyfish-2的安装与使用)