当前位置: 首页 > 工具软件 > Jellyfish > 使用案例 >

jellyfish的安装和使用

秋建义
2023-12-01

JELLYFISHCBCB(Center for Bioinformatics and Computational Biology)的Guillaume Marçais 和 Carl Kingsford 研发的一款计数 DNA 的 k-mers 的软件。该软件运用 Hash 表来存储数据,同时能多线程运行,速度快,内存消耗小。该软件只能运行在64位的Linux系统下。其文章于2011年发表在杂志 Bioinformatics 上。

 JELLYFISH安装

$ wget http://www.cbcb.umd.edu/software/jellyfish/jellyfish-1.1.10.tar.gz
$ tar zxvf jellyfish-1.1.10.tar.gz
$ mkdir jellyfish
$ cd jellyfish-1.1.10
$ ./configure --prefix=$PWD/../jellyfish
如果安装在当前目录中,会报错。
$ make -j 8
$ make install

 也可以从这下载安装:

wget https://github.com/gmarcais/Jellyfish/releases/download/v2.3.0/jellyfish-2.3.0.tar.gz
tar -xzvf jellyfish-2.3.0.tar.gz
cd jellyfish-2.3.0
./configure --prefix=$PWD
make -j 4
make install

 JELLYFISH的使用

1. jellyfish的使用方法

快速试试,看教程例子:

./jellyfish-2.3.0/bin/jellyfish count -t 8 -C -m 19 -o 19mer_out -s 16G YS_R1.fq YS_R2.fq
./jellyfish-2.3.0/bin/jellyfish histo -o 19mer_out.histo 19mer_out

$ jellyfish count -C -m 21 -s 1000000000 -t 10 *.fastq -o reads.jf
$ jellyfish histo -t 10 reads.jf > reads.histo

jellyfish的功能有:kmer计数;融合二进制的Hash结果;统计Hash结果;通过Hash结果来画直方图;将Hash结果输出成文本格式;查询指定k-mer的数目。

$ jellyfish count [-o prefix] [-m merlength] [-t threads] [-s hashsize] [--both-strands] fasta [fasta ...]
$ jellyfish merge hash1 hash2 ...
$ jellyfish dump hash
$ jellyfish stats hash
$ jellyfish histo [-h high] [-l low] [-i increment] hash
$ jellyfish query hash
$ jellyfish cite

2. k-mer的计数

使用 count 的命令来执行计数功能,使用例子:

$ jellyfish count -m 16 -s 100M -t 24 -o mer_counts -c 7 input.fastq
使用fastq文件在默认参数上和fasta文件没有区别。生成的hash结果为二进制文件。

常用参数:

-m | --mer-len=<num>
    使用的k-mer的长度。如果基因组大小为G,则k-mer长度选择为: k ~= log(200G)
/log(4)。
-s | --size=<num>
    Hash 的大小。最好设置的值大于总的独特的(distinct)k-mer数,这样生成的文件只
有一个。若该值不够大,则会生成多个hash文件,以数字区分文件名。如果基因组大小为G,每
个reads有一个错误,总共有n条reads,则该值可以设置为『(G + n)/0.8』。该值识别 
M 和 G。
-t | --threads=<num>  default: 1
    使用的CPU线程数
-o | --output=<string>  default: mer_counts
    输出的结果文件前缀
-c | --counter-len=<num>  default:7
    k-mer的计数结果所占的比特数,默认支持的最大数字是2^7=128。对于基因组测序覆盖
度为N,则要使设置的该值要大于N。该值越大,消耗内存越大。
-out-counter-len=<num>  default:4
    输出的二进制hash文件中的计数结果所占的字节数,一个字节是8比特。则默认支持的最大
数字是2^32=4.3G
-C | --both-strand  default: false
    对正义链和反义链都进行计数
-q | --quake  default: false
    quake兼容模式
--quality-start=<num>  default: 64
    起始碱基质量的ASCII值,默认为PHRED64
--min-quality=<num>  default: 0
    支持的最小的碱基质量值,低于此值的碱基将由N代替
-L | --lower-count=<num>
    不输出数目低于此值的k-mer
-U | --upper-count=<num>
    不输出数目高于此值的k-mer

3. 融合二进制的输出结果

上一步的输出结果为二进制文件,可能输出了多个hash文件,因此需要将这些hash文件合并成一个文件,此时用到 merge 命令。使用方法:

$ jellyfish merge -o mer_counts_merged.jf hash1 hash2 ...

常用参数:

-o | --output=<string>  default: mer_counts_merged.jf
    输出的结果文件
--out-counter-len=<num>  default: 4
输出的二进制hash文件中的计数结果所占的字节数,一个字节是8比特。则默认支持的最大数字
是2^32=4.3G

4. 对hash结果进行统计

k-mer的结果以hash的二进制文件结果给出,需要统计出k-mer总数,特异的k-mer数目,只出现过一次的kmer数,出现了最多的k-mer的数目等信息。以stats命令来运行。使用方法:

$ jellyfish stats hash
示例结果为:
Unique:    32355544    #只出现过一次的k-mer的数目
Distinct:  88414020    #特异性的k-mer数目,包含上一个的数据
Total:     432232807   #总的k-mer数目
Max_count: 85348       #同一个k-mer出现的最多的数目

常用参数:

-L | --lower-count=<num>
    不统计数目低于此值的k-mer
-U | --upper-count=<num>
    不统计数目高于此值的k-mer

5. 通过Hash结果来画直方图

对k-mer的计数结果有个直观的认识,则需要统计出现了x(x=1,2,3…)次的kmer的数目y,以x,y为横纵坐标画出直方图。使用 histo 命令能给出 x 和 y 对应的值,将结果默认输出到标准输出。其使用方法为

$ jellyfish histo -l 1 -h 1000 hash

常用参数:

-l | --low=<num>  default: 1
    最低的 x 轴的值。同时结果会将低于此值的所有的k-mer的数目作为 (x-1) 的值。因
此该值为 2 和 1 的结果是一致的。
-h | --high=<num>  default: 10000
    最高的 x 轴的值。同时结果会将高于此值的所有的k-mer的数目的和作为 (x+1) 的值。
-i | --increment=<num>  default: 1
    x 轴取值是每隔该数值取值
-t | --threads=<num>  default: 1
    使用的CPU线程数
-f | --full  default: false
    全部的直方图

6. 将二进制Hash结果转换成文本文件

由于count命令生成的结果为二进制的,如有需要,则可以转换成可读文本文件。使用 dump 命令,使用方法:

$ jellyfish dump -c -t -U 1000 hash

常用参数:

-c | --colum  default: false
    生成结果为2列,第一列为k-mer序列,第二列为对应的数目。默认情况下是是fasta格
式,fasta的头为k-mer的数目,fasta的序列为k-mer的序列。
-t | --tab  default: false
    当 -c 参数存在时,以tab来进行分隔两行。默认是以空格来分开的。
-L | --lower-count=<num>
    不输出小于该值的k-mer
-U | --upper-count=<num>
    不输出高于该值的k-mer
-o | --output=<file>
    输出文件的路径和名称

7. 查询指定的k-mer出现的次数

如果需要从Hash结果中查询指定的k-mer出现的次数,则要是用 query 命令。从标准输入读取k-mer的序列,从标准输出得到k-mer对应的数目。使用方法

$ jellyfish query hash

常用参数:

-C | --both-strands  default: false
    同时查询k-mer序列的正负链
-i | --input=<file>
    输入的文件
-o | --output=<file>
    输出的文件

示例:
#统计both.fa中将k-mer设为31时所生成的reads的数目。其中:-t表示线程数;-m表示所设定的k-mer大小;-s表示所生成的哈希表的大小;--cannonical表示规范化。默认将结果输出到mer_counts.jf,重定向使用-o参数。
jellyfish count -t 10 -m 31 -s 4000465651  --canonical  both.fa

#将k-mer的序列输出到文件jellyfish.kmers.fa中。在fa文件中,头部为总的k-mer的数目,其它的都未每个k-mer的reads出现的次数。-L用来指定过滤掉的最低频率,-U用来制定过滤掉的最高频率。
jellyfish dump -L 2 mer_counts.jf > jellyfish.kmers.fa

#输出k-mer频率的直方图到*.histo文件
jellyfish histo -t 10 -o jellyfish.kmers.fa.histo mer_counts.jf

类似的工具还有 GCE和GenomeScope

GenomeScope

使用jellyfish软件利用二代测序数据估计基因组大小 - 知乎

jellyfish的安装和使用 | 陈连福的生信博客

 

 类似资料: