47个版本

0.2.25 2024年5月9日
0.2.24 2024年5月1日
0.1.11 2023年9月29日
0.1.7 2023年8月18日
0.0.14 2022年9月30日

#214 in 生物学

Download history 180/week @ 2024-04-26 76/week @ 2024-05-03 128/week @ 2024-05-10 8/week @ 2024-05-17 3/week @ 2024-05-24 1/week @ 2024-06-07 2/week @ 2024-06-14 1/week @ 2024-06-28 37/week @ 2024-07-05 4/week @ 2024-07-12 1/week @ 2024-07-19 577/week @ 2024-07-26 37/week @ 2024-08-02

616 每月下载
2 crates 中使用

MIT 许可证

515KB
11K SLoC

MIT licensed actions status codecov Crates.io docs.rs

bedrs

bedtools 类似的功能,用于Rust中的区间集合

摘要

这是一个用Rust编写的区间库,利用了特质系统、泛型、单态化和过程宏,以实现高效的区间操作,并提供了良好的开发者体验特性。

它主要围绕 Coordinates 特质,一旦在任意区间类型上实现,就可以进行广泛的基因组区间算术。

它还引入了一种新的集合类型,IntervalContainer,它作为 Coordinates 的集合,并实现了许多集合操作。

区间算术可以被视为对具有相关染色体、链和其他基因组标记的区间进行集合论操作(如交集、并集、差集、补集等)。

这个库简化了这些类型操作的开发,允许用户根据自己的结构进行定制以最小化计算开销,同时仍是一个灵活的通用区间操作库。

使用

这个库的主要好处是它基于特质。因此,您可以定义自己的类型——但如果它们实现了 Coordinates 特质,它们就可以使用库中的其他函数。

有关详细使用和示例,请参阅 文档

Coordinates 特质

这个库的核心是 Coordinates 特质。

这个属性定义了所有集合操作所需的一些最小函数。这包括获取区间染色体ID、该区间的起始点和终点,或者链等信息。

这可以通过手动实现,或者如果你遵循库中常用的命名约定(如chrstartendstrand),则可以在自定义区间类型上使用[derive(Coordinates)]

use bedrs::prelude::*;

// define a custom interval struct for testing
#[derive(Default, Coordinates)]
struct MyInterval {
    chr: usize,
    start: usize,
    end: usize,
}

区间类型

虽然您可以创建自己的区间类型,但已经有很多“内置电池”类型可以在自己的库中使用。

包括以下内容:

这些是预构建的区间类型,可以在许多用例中使用。

use bedrs::prelude::*;

// An interval on chromosome 1 and spanning base 20 <-> 40
let a = Bed3::new(1, 20, 40);

// An interval on chromosome 1 and spanning base 30 <-> 50
let b = Bed3::new(1, 30, 50);

// Find the intersecting interval of the two
// This returns an Option<Bed3> because they may not intersect.
let c = a.intersect(&b).unwrap();

assert_eq!(c.chr(), &1);
assert_eq!(c.start(), 30);
assert_eq!(c.end(), 40);

区间操作

区间集合操作

集合操作是通过使用IntervalContainerIntervalContainer方法来实现的。

我们可以在任何区间集合上轻松构建IntervalContainer

use bedrs::prelude::*;

let set = IntervalContainer::new(vec![
    Bed3::new(1, 20, 30),
    Bed3::new(1, 30, 40),
    Bed3::new(1, 40, 50),
]);

assert_eq!(set.len(), 3);

有关这些方法的更多详细信息,请参阅IntervalContainer

  • 界限
  • 最近
  • 补码
  • 查找
  • 内部
  • 合并
  • 样本
  • 交集
  • 分段
  • 减法

其他工作

这个库受到以下Rust中其他区间库的极大启发:

它还受到以下C++和C中区间工具集的启发

依赖关系

~1.5–2.6MB
~47K SLoC