安装步骤
conda install -c bioconda jellyfish=2.2.10
计算测序数据中的k-mer
示例命令:
$ jellyfish count -m 21 -s 100M -t 10 -C -o /home/user/jellyfish/result/mer_counts.jf R1.fq R2.fq
参数说明:
count 计数模式
-m 21 k-mer值设定为21
-s 100M 储存在Hash中的k-mer数量为100M
-t 10 线程数10
-C 同时计算正负链k-mer
-o 输出文件名
-s 参数详解:该参数仅是一个估计值,与物种基因组大小相关,如人类基因组为3G,则 -s 3G。对于测序reads,这个大小应该是基因组的大小加上测序错误产生的 k-mer。例如,如果错误率为 e(例如 Illumina 读取,通常为 e~1%),估计基因组大小为 G,覆盖率为 c,则预期 k-mer 的数量为 G+Gcek。对于jellyfish2来说,当该值设置太小而无法容纳所有的k-mer,则Hash大小会自动增加或部分写入磁盘中,并最终将其自动合并,而对于jellyfish1是需要额外运行jellyfish merge命令
-C 参数详解:k-mer及其反向互补序列本质上是相等的,对于k-mer A来说,A或A的反向互补序列均是典型代表序列,因此在设置 -C 时,Hash仅记录A或A的反向互补序列中的其中一个,以先出现顺序为准,但对于k-mer的次数计算,则是A和A的反向互补序列共两次
计算基因组中的k-mer
对于实际的基因组(actual genome)或完成序列(finished sequence),k-mer A及其反向互补是不等价的,因此 -C 没有意义,Hash大小可直接设置为基因组大小
若对主要由测序错误引起的低频k-mer(仅出现1次)不感兴趣,可考虑仅计算高频k-mer,所需内存更少且更快
计算高频k-mer
jellyfish提供两种仅计算高频k-mer的方法,可显著减少内存使用量。第一种方法称为One pass method,它提供一定百分比的k-mer的近似计数;第二种方法称为Two passes method,它提供k-mer的精确计数
One pass method
$ jellyfish count -m 25 -s 3G --bf-size 100G -t 16 homo_sapiens.fa
-s 3G 预期高频k-mer的总数为3G
--bf-size 100G 预期整个输入数据集中的k-mer总数为100G(包括仅出现1次的低频k-mer)
这种方法的缺点是会记录某些不应该被报告的k-mer百分比,原因是Bloom过滤器数据结构的随机性,默认情况下,百分比为<1%,可通过 --bf -fp 进行调整
Two passes 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
在该方法中,先从 jellyfish bc 中创建一个Bloom计数器,再将通过该计数器的高频k-mer(出现次数>1)提供给 jellyfish count,并记录在Hash中
这种方法的优点是除1-mer以外的k-mer计数都是正确的,大多数的1-mer不会被记录,除了一小部分(假阳性率,通过 bc -f 进行调整),缺点是需要对整个reads数据集进行两次解析
自定义k-mer的集合的计算
$ jellyfish count -m 20 -s 100M -C -t 10 -o 20and1.jf --if chr20.fa chr1.fa
该命令可先从chr20.fa文件中提取所有非冗余的20-mer,并将其形成一个集合,计算该集合中的20-mer在chr1.fa文件中出现的次数
上述提供给 --if 的文件必须是Fasta文件,如果是k-mer清单,则需自行转换
其他模式
histo 模式
可输出k-mer频率直方图数据,如:
$ jellyfish histo 20and1.jf | head -5
0 49401674
1 1116213
2 425471
3 250702
4 170160
显示k-mer的出现次数,如出现0次的20-mer有49401674个
dump 模式
输出带有计数信息的k-mer清单,如:
$ jellyfish dump mer_counts.jf > mer_counts_dumps.fa
默认为Fasta格式,标题行包含k-mer计数,序列部分为k-mer序列。对于低频和高频k-mer可分别通过 -L 和 -U 进行跳过,还可通过添加 -c -t 输出为人类易读格式
query 模式
查询特定的k-mer出现的次数,如:
$ jellyfish query mer_counts.jf AACGTTG
AACGTTG 10
info 模式
获取结果文件的生成方式,时间地点等信息,如:
$ jellyfish info mer_counts.jf
stats 模式
快速汇总k-mer信息,如:
$ jellyfish stats mer_counts.jf
Unique(仅出现一次的k-mer数量):6377643
Distinct(非冗余的k-mer个数):8454759
Total(k-mer总数):24323454
Max_count(k-mer的最大出现次数):58964
mem 模式
预估count命令需要的内存量,如:
$ jellyfish mem -m 24 -s 1G
4521043056 (4G)
仅需将计数模式命令的 count 替换为 mem 即可
参考资料:
https://github.com/gmarcais/Jellyfish/blob/master/doc/Readme.md
https://www.jianshu.com/p/6c10b958fddb
https://www.jianshu.com/p/f86b30617772