KMC 3.2.4 安装与使用--生信工具108

什么是 KMC

KMC 是一款基于磁盘的 k‑mer 计数工具,可以读取 gzip 压缩或普通的 FASTQ/FASTA 文件完成 k‑mer 统计。该工具由 REFRESH 生物信息学小组开发。

如果需要读取 KMC 生成的 k‑mer 数据库,可以使用配套 API(代码目录:kmc_api)。

版本注意:

  1. KMC 0.x/ 1.x 的数据库格式,与 2.x 版本不兼容。
  2. 从 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_pre27mers.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
依赖库说明
  1. zlib(二进制预编译,x86‑64) 用于读取 gzip 压缩的 FASTQ/FASTA。如果你的系统不兼容提供的二进制,需要自行替换库文件放到 kmc_core/libs
  2. pybind11(源码形式) 用于构建 KMC API 的 Python 封装。

可修改 k‑mer 最大长度:当前默认最大 k=256。 KMC 做了高度优化:MAX_K设置更大,不会对短 k‑mer 的运行性能产生负面影响,k‑mer 占用字节向上对齐到 8 字节。
编译环境:KMC 部分代码依赖 C++17,需要使用支持 C++17 的 C++ 编译器。 编译完成后,make会构建kmckmc_dump两个程序。

MacOS 额外注意事项
  1. 可能需要修改makefile_mac内部 g++ 路径;推荐通过 homebrew 安装 g++。

  2. 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 开发。

⚠️重要警告

  1. Python 绑定属于实验性功能,接口、底层库未来可能变动。
  2. Python 版本 API 速度远低于原生 C++ API;早期尝试过 ctypes 实现,速度比 pybind11 版本还要慢。
  3. 仅针对 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目录主要产物:

  1. bin/kmc:主程序,统计 k‑mer 丰度
  2. bin/kmc_dump:读取数据库输出 k‑mer(废弃,优先 kmc_tools)
  3. bin/kmc_tools:数据库工具集,支持集合运算、格式转换等
  4. bin/libkmc_core.a:KMC 静态库
  5. py_kmc_api.cpython‑xxx.so:Python 封装模块

引用

  1. 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
  2. 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
  3. 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
相关推荐
今天AI了吗1 小时前
从聊天到委派:AI Agent 如何推进长期任务
数据库·人工智能·python·sql·rust
—Miss. Z—2 小时前
第11章 故障管理
网络·数据库·oracle
WA内核拾荒者2 小时前
WhatsApp账号运营SOP的可视化编排与流水线监控
大数据·数据库·windows
名字还没想好☜3 小时前
Kubernetes StatefulSet 实战:为什么数据库不能用 Deployment 部署
数据库·云原生·容器·kubernetes·statefulset
01_ice4 小时前
MySQL事务
数据库·mysql
名字还没想好☜4 小时前
Go 的 database/sql 连接池实战:SetMaxOpenConns 怎么配、连接泄漏怎么查
数据库·sql·golang·go·数据库连接池
大眼、不聚光4 小时前
2.oracle--表空间管理
数据库·oracle
字节跳动数据库4 小时前
火山 PostgreSQL Serverless × 飞书妙搭:把 AI 装进数据库,一句话唤醒数据智能
数据库·人工智能·后端
玛丽莲茼蒿4 小时前
Redis(六)—— Redis高级
数据库·redis·缓存