一、Jellyfish简介
JELLYFISH是CBCB(Center for Bioinformatics and Computational Biology)的Guillaume Marçais 和 Carl Kingsford 研发的一款计数 DNA 的 k-mers 的软件。该软件运用 Hash 表来存储数据,同时能多线程运行,速度快,内存消耗小。该软件只能运行在64位的Linux系统下。其文章于2011年发表在杂志 Bioinformatics 上。
二、Jellyfish安装
1 2 3 4 5 6 7 8
| $ 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=Your/Path/to/jellyfish 如果安装在当前目录中,会报错。 $ make -j 8 $ make install
|
三、Jellyfish的使用
1. jellyfish的使用方法
jellyfish的功能有:kmer计数;融合二进制的Hash结果;统计Hash结果;通过Hash结果来画直方图;将Hash结果输出成文本格式;查询指定k-mer的数目。
1 2 3 4 5 6 7
| $ 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的命令来执行计数功能,例子:
1 2
| $ jellyfish count -m 16 -s 100M -t 24 -o mer_counts -c 7 input.fastq 使用fastq文件在默认参数上和fasta文件没有区别。生成的hash结果为二进制文件。
|
常用参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| -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 + k*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。该值越大,消耗内存越大。例如,如果基因组的覆盖度为10X,那么就要选择4(-c 4) 的counter长度,由于2^4 > 10。 -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 命令。使用方法:
1
| $ jellyfish merge -o mer_counts_merged.jf hash1 hash2 ...
|
常用参数:
1 2 3 4 5
| -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命令来运行。使用方法:
1 2 3 4 5 6
| $ jellyfish stats hash 示例结果为: Unique: 32355544 #只出现过一次的k-mer的数目 Distinct: 88414020 #特异性的k-mer数目,包含上一个的数据 Total: 432232807 #总的k-mer数目 Max_count: 85348 #同一个k-mer出现的最多的数目
|
常用参数:
1 2 3 4
| -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 对应的值,将结果默认输出到标准输出。其使用方法为
1
| $ jellyfish histo -l 1 -h 1000 hash
|
常用参数:
1 2 3 4 5 6 7 8 9 10 11
| -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 命令,使用方法:
1
| $ jellyfish dump -c -t -U 1000 hash
|
常用参数:
1 2 3 4 5 6 7 8 9 10 11
| -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对应的数目。使用方法
常用参数:
1 2 3 4 5 6
| -C | --both-strands default: false 同时查询k-mer序列的正负链 -i | --input=<file> 输入的文件 -o | --output=<file> 输出的文件
|
四、思考
对Illumina paired-end测序结果进行jellyfish分析
由于paired-end序列有一定的顺序,需要将第2个文件的序列进行反向重复后,在和第一个文件的序列合到一起进行分析。可以使用Trinity中附带的软件fastool来将fastq文件转换成fasta文件,以及反向重复的转换。
1 2 3 4
| $ $Trinity_Home/trinity-plugins/fastool/fastool --illumina-trinity --to-fasta reads_1.fastaq > reads_1.fasta $ $Trinity_Home/trinity-plugins/fastool/fastool --rev --illumina-trinity --to-fasta reads_2.fastaq > reads_2.fasta $ cat reads_1.fasta reads_2.fasta > both.fasta $ jellyfish count ....
|
来源:http://starsyi.github.io/2016/05/22/Jellyfish%E8%AF%A6%E8%A7%A3/