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_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
依赖库说明
  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会构建kmc、kmc_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
相关推荐
꯭自꯭闭꯭3 小时前
达梦守护集群手工切换及故障切换
linux·运维·服务器·数据库
j7~3 小时前
【Redis初阶】(篇二)《一文吃透 Redis:特性、应用场景、版本演进与安装配置全解析》
数据库·redis·缓存·redis的特性·redis的主要应用场景·redis重要文件及其作用·安装并启动redis
Elastic 中国社区官方博客3 小时前
使用 NVIDIA cuVS 在 Elasticsearch 中实现 GPU 加速的向量索引:在 10 分钟内处理 1.38 亿个向量
大数据·数据库·elasticsearch·搜索引擎·全文检索·安全威胁分析
我们从未走散3 小时前
AI 生图平台如何避免资损:用“扣款与凭据同事务”构建三态账本
开发语言·数据库·php
Shadow(⊙o⊙)4 小时前
MySQL复合查询
数据库·mysql
L·S·P9 小时前
25MB 管理 100+ 种数据库:开源轻量客户端 DBX 介绍与上手
数据库·mysql·开源·database·dbx
笃行35011 小时前
KingbaseES KSQL Developer 的连接管理、数据处理与对象管理
数据库
ha_lydms12 小时前
MaxCompute中加密与解密函数
大数据·数据库·数据仓库·hadoop·dataworks·maxcompute·odps
Shadow(⊙o⊙)12 小时前
MySQL内置函数
数据库·mysql
笃行35012 小时前
金仓 KingbaseES PL/SQL 开发全攻略:异常处理、数据类型、调试优化与过程语句
数据库