什么是 KMC
KMC 是一款基于磁盘的 k‑mer 计数工具,可以读取 gzip 压缩或普通的 FASTQ/FASTA 文件完成 k‑mer 统计。该工具由 REFRESH 生物信息学小组开发。
如果需要读取 KMC 生成的 k‑mer 数据库,可以使用配套 API(代码目录:kmc_api)。
版本注意:
- KMC 0.x/ 1.x 的数据库格式,与 2.x 版本不兼容。
- 从 2.2.0 版本开始,API 统一适配新旧两种数据库格式;所有新功能、bug 修复仅维护在 2.x 分支。旧版本独立 API 不再开发,即使是旧版本 KMC 生成的数据库,也建议使用新版 API 读取。
使用
获取可执行程序
bash
https://github.com/refresh-bio/KMC #官网
最简单的方式:前往 KMC releases 页面,下载对应操作系统的最新发布包。
bash
wget -c https://github.com/refresh-bio/KMC/releases/download/v3.2.4/KMC3.2.4.linux.x64.tar.gz
对单条 fastq 文件统计 k‑mer
./kmc -k27 input.fastq 27mers .
这条命令统计input.fastq中所有 27‑mer,默认统计出现≥2 次的 k‑mer(可通过‑ci参数修改阈值) 。 输出为 KMC 二进制数据库,生成两个文件:27mers.kmc_pre、27mers.kmc_suf。
KMC 运行过程会生成数百个临时中间文件。上面命令末尾的.代表临时文件输出到当前工作目录。更推荐单独创建目录存放临时文件,避免目录混乱:
mkdir kmc_tmp # create directory for kmc temporary files
./kmc -k27 input.fastq 27mers kmc_tmp
将二进制数据库导出文本格式
k‑mer 统计完成后,可以使用kmc_tools把二进制数据库转成文本文件:
./kmc_tools transform 27mers dump 27mers.txt
安装说明
源码编译
git clone --recurse-submodules https://github.com/refresh-bio/kmc.git
cd kmc
make -j32
依赖库说明
- zlib(二进制预编译,x86‑64) 用于读取 gzip 压缩的 FASTQ/FASTA。如果你的系统不兼容提供的二进制,需要自行替换库文件放到
kmc_core/libs。 - pybind11(源码形式) 用于构建 KMC API 的 Python 封装。
可修改 k‑mer 最大长度:当前默认最大 k=256。 KMC 做了高度优化:
MAX_K设置更大,不会对短 k‑mer 的运行性能产生负面影响,k‑mer 占用字节向上对齐到 8 字节。
编译环境:KMC 部分代码依赖 C++17,需要使用支持 C++17 的 C++ 编译器。 编译完成后,make会构建kmc、kmc_dump两个程序。
MacOS 额外注意事项
-
可能需要修改
makefile_mac内部 g++ 路径;推荐通过 homebrew 安装 g++。 -
Mac 系统默认打开文件数限制很小,KMC 会生成大量临时文件,运行前调高文件句柄上限:
ulimit -n 2048
编译后目录结构
bin:编译完成后的可执行文件、库文件include:C++ API 头文件,用于二次开发调用 KMC 内核kmc_core:KMC 核心库源码kmc_CLI:kmc 命令行程序源码kmc_tools:kmc_tools 工具源码kmc_core/libs:第三方依赖库kmc_api:访问 KMC 数据库的 C++ API 源码,所有读取 KMC 数据库的程序都需要引用kmc_dump:旧版 k‑mer 导出工具(已废弃,请改用 kmc_tools)py_kmc_api:KMC API 的 Python 封装tests:测试用例
通过 API 直接在代码调用 KMC
C++ 调用
可以直接在 C++ 代码中调用 KMC 内核,完整 API 文档参考项目 wiki。
Python 封装(实验性质)
Python 绑定基于 pybind11 开发。
⚠️重要警告
- Python 绑定属于实验性功能,接口、底层库未来可能变动。
- Python 版本 API 速度远低于原生 C++ API;早期尝试过 ctypes 实现,速度比 pybind11 版本还要慢。
- 仅针对 Python3 测试;接口风格贴近 C++,不完全符合 python 习惯,欢迎提交 PR 改进健壮性。
Python 模块编译
-
Windows:提供 Visual Studio 工程,需要手动配置 Python 头文件、库文件路径。
-
Linux / MacOS:
make py_kmc_api
编译产物:
- Linux/MacOS:
bin/py_kmc_api${python3-config --extension-suffix}(.so文件) - Windows:
x64/Release/py_kmc_api.pyd(本质为 DLL,仅后缀不同)
让 Python 识别模块
Linux / MacOS
source py_kmc_api/set_path.sh
Windows
py_kmc_api\set_path.bat
示例脚本:py_kmc_api/py_kmc_dump.py,完整 API 文档见 wiki。
编译完成后bin目录主要产物:
bin/kmc:主程序,统计 k‑mer 丰度bin/kmc_dump:读取数据库输出 k‑mer(废弃,优先 kmc_tools)bin/kmc_tools:数据库工具集,支持集合运算、格式转换等bin/libkmc_core.a:KMC 静态库py_kmc_api.cpython‑xxx.so:Python 封装模块
引用
- Marek Kokot, Maciej Długosz, Sebastian Deorowicz. KMC 3: counting and manipulating k‑mer statistics. Bioinformatics , 2017, 33(17): 2759‑2761. https://doi.org/10.1093/bioinformatics/btx304
- Sebastian Deorowicz, Marek Kokot, Szymon Grabowski, et al. KMC 2: fast and resource‑frugal k‑mer counting. Bioinformatics , 2015, 31(10):1569‑1576. https://doi.org/10.1093/bioinformatics/btv022
- Deorowicz S, Debudaj‑Grabysz A, Grabowski S. Disk‑based k‑mer counting on a PC. BMC Bioinformatics , 2013, 14:160. https://doi.org/10.1186/1471‑2105‑14‑160