3 个版本
0.1.2 | 2021年3月4日 |
---|---|
0.1.1 | 2020年12月7日 |
0.1.0 | 2020年9月7日 |
#15 in #edit-distance
160KB
2.5K SLoC
edlib_rs
此软件包提供了对 Martin Šošić 的 Edlib C++ 库的 Rust 接口。请参阅 Martinsos-edlib
参考文献是:
Martin Šošić, Mile Šikić; Edlib: a C/C++ library for fast, exact sequence alignment using edit distance. Bioinformatics 2017 [btw753. doi] https://doi.org/10.1093/bioinformatics/btw753
此软件包为 edlib 提供了 2 个接口。
第一个,通过模块绑定访问,是 bindgen 软件包生成的接口。
第二个,通过模块 edlibrs 访问,提供了一种更符合 Rust 习惯的接口。它以在 C 的 struct EdlibAlignResult 中存储的信息(startLocations 和 endLocations 指针)克隆信息为代价,以获得具有 Option
因此,内存管理完全转移到 Rust。
结构和函数的名称与 edlib 中相同,只是在原始名称后附加 "Rs"。
示例
对于 edlibrs 接口,例如:
在正常模式下
use edlib_rs::edlibrs::*;
...
let query = "ACCTCTG";
let target = "ACTCTGAAA";
let align_res = edlibAlignRs(query.as_bytes(), target.as_bytes(), &EdlibAlignConfigRs::default());
assert_eq!(align_res.status, EDLIB_STATUS_OK);
assert_eq!(align_res.editDistance, 4);
在中间模式
use edlib_rs::edlibrs::*;
...
let query = "ACCTCTG";
let target = "TTTTTTTTTTTTTTTTTTTTTACTCTGAAA";
//
let mut config = EdlibAlignConfigRs::default();
config.mode = EdlibAlignModeRs::EDLIB_MODE_HW;
let align_res = edlibAlignRs(query.as_bytes(), target.as_bytes(), &config);
assert_eq!(align_res.editDistance, 1);
安装
该软件包将原始 Edlib 库源代码嵌入到源代码树中(请参阅目录 edlib-c,对应于 2020 年 12 月的源代码),但省略了原始的 test_data 目录以限制软件包的大小。标准的 "cargo build" 命令运行 edlib 的 cmake。
该软件包启用了一个记录器来监视对 C 接口的调用,默认情况下在 Cargo.toml 中设置为发布模式为 info 和调试模式为 trace,但可以通过设置变量 RUST_LOG 来更改(请参阅 env_logger 文档)。
测试
模块 edlib.rs 中的某些测试可以充当基本示例。
在目录 examples 中还有一个 edlib edaligner 模块的小版本(请参阅 edlib 安装目录中的 apps/aligner),该模块可以在只包含一个序列的 Fasta 文件上运行,该序列包含在原始 edlib 目录的 test_data 中。
由于嵌入的源代码不包含原始的 test_data 子目录,因此必须单独下载它们才能运行 edaligner 示例模块。
与 edlib 版本不同,该模块在查询序列和目标序列给定的情况下运行 3 种模式(正常/NW、前缀/SHW 和中间/HW)的单次通过。
使用 RUST_LOG=info ./target/release/examples/edaligner --dirdata "$edlibpath/test_data/Enterobacteria_Phage_1" --tf "Enterobacteria_phage_1.fasta" --qf "mutated_90_perc.fasta"
我们得到以下发布模式下的时间,以 Enterobacteria_phage_1.fasta 作为目标序列,以 mutated_90_perc.fasta 作为查询序列。
模式 | edlibrs 时间(s) | edlib 时间(s) | 距离 |
---|---|---|---|
NW | 0.106 | 0.106 | 9506 |
SHW | 0.184 | 0.191 | 9502 |
HW | 0.682 | 0.695 | 9502 |
以 Enterobacteria_phage_1.fasta 作为目标序列和 mutated_60_perc.fasta 作为查询序列,在发布模式下我们得到了以下时间。
模式 | edlibrs 时间(s) | edlib 时间(s) | 距离 |
---|---|---|---|
NW | 0.398 | 0.398 | 39829 |
SHW | 0.670 | 0.684 | 39828 |
HW | 1.182 | 1.206 | 39828 |
除了 CPU 时间测量的微小变化外,我们看到了相同的计算时间。
许可证
许可协议为以下之一:
- Apache License,版本 2.0,LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0
- MIT 许可协议 LICENSE-MIT 或 http://opensource.org/licenses/MIT
任选其一。
依赖关系
约 4–14MB
~148K SLoC